{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. Core - Net\n",
    "\n",
    "        1.1.Import details\n",
    "        1.2 Functions\n",
    "        1.3 FC layer example\n",
    "        1.4 Network Visualizer\n",
    "        1.5 Running a network if created using Core - Net\n",
    "    \n",
    "\n",
    "2. General Helpers\n",
    "    \n",
    "        2.1 Functions\n",
    "    \n",
    "\n",
    "3. General Model Helpers\n",
    "\n",
    "        3.1 Import details\n",
    "        3.2 Functions in Model Helpers\n",
    "        3.3 Assistive Funcationalities of Model Helpers\n",
    "        3.4 FC Layer example \n",
    "        3.4 Creating Network using Model Helpers\n",
    "        \n",
    "        \n",
    "4. Brew\n",
    "\n",
    "        4.1 Import details\n",
    "        4.2 Supported operators in brew\n",
    "        4.3 Why brew?\n",
    "        4.4 Creating Network using brew and observing the difference\n",
    "        \n",
    "        \n",
    "5. CNN Model Helpers\n",
    "\n",
    "        5.1 Import details\n",
    "        5.2 Supported operators in brew\n",
    "        5.3 Where to use CNN Model Helpers?\n",
    "        5.4 Creating Network using CNN Model Helpers and observing the difference\n",
    "\n",
    "\n",
    "6. Explaining - Assistive Funcationalities of Model Helpers\n",
    "\n",
    "        6.1 Creating an outer shell (A Protobuf Object) which can hold the all necessary objects. \n",
    "        6.2 Adding input data blobs\n",
    "        6.3 Adding network  \n",
    "        6.4 Adding Training Parameters\n",
    "        6.5 Logging Network Summaries\n",
    "        6.6 Initializing network parameters\n",
    "        6.7 Training a network\n",
    "\n",
    "\n",
    "7. Sample Data Downloading and arrangement "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:root:This caffe2 python run does not have GPU support. Will run in CPU only mode.\n",
      "WARNING:root:Debug message: No module named caffe2_pybind11_state_gpu\n"
     ]
    },
    {
     "data": {
      "text/markdown": [
       "**Necessities imported!**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Import required libraries\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import numpy as np\n",
    "import os\n",
    "import shutil\n",
    "import caffe2.python.predictor.predictor_exporter as pe\n",
    "\n",
    "\n",
    "from caffe2.python import (\n",
    "    brew,\n",
    "    core,\n",
    "    model_helper,\n",
    "    net_drawer,\n",
    "    optimizer,\n",
    "    visualize,\n",
    "    workspace,\n",
    "    cnn,\n",
    ")\n",
    "from IPython.display import Markdown\n",
    "from IPython.display import Image\n",
    "\n",
    "# If you would like to see some really detailed initializations,\n",
    "# you can change --caffe2_log_level=0 to --caffe2_log_level=-1\n",
    "core.GlobalInit(['caffe2', '--caffe2_log_level=0'])\n",
    "\n",
    "def printmd(string):\n",
    "    display(Markdown(string))\n",
    "\n",
    "printmd(\"**Necessities imported!**\")\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1. Core - NET\n",
    "\n",
    "The base net creator. Even though we won't be using this class directly for network creations, we have listed a few functions and methodologies you need to be aware of when building nets using model_helpers or brew.\n",
    "\n",
    "To get more details refer to the file: https://github.com/caffe2/caffe2/blob/master/caffe2/python/core.py\n",
    "\n",
    "### 1.1 Import Details\n",
    "\n",
    "Imports net_builder base from caffe2.python module"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.2 Functions\n",
    "\n",
    "1) Core.Net -> Creates an empty network with the name provided as argument\n",
    "\n",
    "2) Proto -> Printing network as a structured function\n",
    "\n",
    "3) Net.SomeOperator -> All the Operators, Layers, Fillers, Initializers, Optimizers can be stacked together using Net.SomeOperator funcationalities \n",
    "\n",
    "4) AppendNet -> Appends network with another net\n",
    "\n",
    "5) BlobIsDefined -> Returns True if Network has a certain Blob. Pass the BlobReference as argument.\n",
    "\n",
    "6) UsedBlobNames -> Returns list of blob names used the net \n",
    "\n",
    "7) Clone -> Clones network\n",
    "\n",
    "Lets examine a few of such functions."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**1) Core.Net Function**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Nets created using:  net = core.Net(\"net_name\") statement\n"
     ]
    }
   ],
   "source": [
    "#########################################################################################################\n",
    "printmd(\"**1) Core.Net Function**\")\n",
    "#Creating an empty net\n",
    "net1 = core.Net(\"first_net\")\n",
    "net2 = core.Net(\"second_net\")\n",
    "print \"Nets created using: \", \"net = core.Net(\\\"net_name\\\") statement\"\n",
    "#########################################################################################################"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**2) Proto Function**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "First network proto:\n",
      "\n",
      "name: \"first_net\"\n",
      "\n",
      "Second network proto:\n",
      "\n",
      "name: \"second_net\"\n",
      "\n"
     ]
    },
    {
     "data": {
      "text/markdown": [
       "**3) Net.SomeOperator**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "First network proto:\n",
      "\n",
      "name: \"first_net\"\n",
      "op {\n",
      "  output: \"X\"\n",
      "  name: \"\"\n",
      "  type: \"GaussianFill\"\n",
      "  arg {\n",
      "    name: \"std\"\n",
      "    f: 1.0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"run_once\"\n",
      "    i: 0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 2\n",
      "    ints: 3\n",
      "  }\n",
      "  arg {\n",
      "    name: \"mean\"\n",
      "    f: 0.0\n",
      "  }\n",
      "}\n",
      "\n",
      "Second network proto:\n",
      "\n",
      "name: \"second_net\"\n",
      "op {\n",
      "  output: \"Y\"\n",
      "  name: \"\"\n",
      "  type: \"GaussianFill\"\n",
      "  arg {\n",
      "    name: \"std\"\n",
      "    f: 3.0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"run_once\"\n",
      "    i: 0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 6\n",
      "    ints: 9\n",
      "  }\n",
      "  arg {\n",
      "    name: \"mean\"\n",
      "    f: 1.0\n",
      "  }\n",
      "}\n",
      "\n",
      "Added Gaussian Filler to the nets\n"
     ]
    },
    {
     "data": {
      "text/markdown": [
       "**A completes list of functions of net -> Operators, Layers, Fillers, Initializers, Optimizers**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[u'APMeter', u'Abs', u'AbsGradient', u'Accumulate', u'AccumulateHistogram', u'Accuracy', u'Adagrad', u'Adam', u'Add', 'AddExternalInput', 'AddExternalInputs', 'AddExternalOutput', 'AddExternalOutputs', 'AddGradientOperators', 'AddObserver', u'AddPadding', 'AddScopedExternalInputs', 'AddScopedExternalOutputs', u'Alias', u'Allgather', u'Allreduce', u'And', u'Append', 'AppendNet', 'AppendOutputRecordField', u'Assert', u'AtomicAppend', u'AtomicFetchAdd', u'AtomicIter', u'AveragePool', u'AveragePool1D', u'AveragePool1DGradient', u'AveragePool2D', u'AveragePool2DGradient', u'AveragePool3D', u'AveragePool3DGradient', u'AveragePoolGradient', u'AveragedLoss', u'AveragedLossGradient', u'BBoxTransform', u'BRGNCHWCToPackedInt8BGRAStylizerDeprocess', u'Barrier', u'BatchBoxCox', u'BatchBucketOneHot', u'BatchDenseToSparse', u'BatchGather', u'BatchGatherGradient', u'BatchMatMul', u'BatchOneHot', u'BatchSparseToDense', u'BatchToSpace', 'BlobIsDefined', u'BooleanMask', u'BooleanMaskLengths', u'BooleanUnmask', u'BoxWithNMSLimit', u'Broadcast', u'Cast', u'Ceil', u'ChannelBackpropStats', u'ChannelShuffle', u'ChannelShuffleGradient', u'ChannelStats', u'CheckAtomicBool', u'CheckCounterDone', u'CheckDatasetConsistency', u'Checkpoint', u'Clip', u'ClipGradient', 'Clone', u'CloneCommonWorld', 'ClonePartial', u'CloseBlobsQueue', u'CloseRebatchingQueue', u'Col2Im', u'CollectTensor', u'ColwiseMax', u'ColwiseMaxGradient', u'ComputeOffset', u'Concat', u'ConcatTensorVector', u'Conditional', u'ConditionalSetAtomicBool', 'Const', u'ConstantFill', u'Conv', u'Conv1D', u'Conv1DGradient', u'Conv2D', u'Conv2DGradient', u'Conv3D', u'Conv3DGradient', u'ConvGradient', u'ConvTranspose', u'ConvTransposeGradient', u'Copy', u'CopyFromCPUInput', u'CopyOnDeviceLike', u'Cos', u'CosGradient', u'CosineEmbeddingCriterion', u'CosineEmbeddingCriterionGradient', u'CosineSimilarity', u'CosineSimilarityGradient', u'CountDown', u'CountUp', u'CpuUtilizationReport', u'CreateAtomicBool', u'CreateBlobsQueue', u'CreateBlobsQueueDB', u'CreateCommonWorld', u'CreateCounter', u'CreateDB', u'CreateMap', u'CreateMutex', u'CreateRebatchingQueue', u'CreateScope', u'CreateTensorVector', u'CreateTextFileReader', u'CreateTreeCursor', u'CrossEntropy', u'CrossEntropyGradient', u'DBExists', 'DeduplicateGradientSlices', u'DepthConcat', u'DepthSplit', u'DequeueBlobs', u'DequeueRebatchingQueue', u'DestroyCommonWorld', u'DiagonalFill', u'Div', u'DivGradient', u'Do', u'DotProduct', u'DotProductGradient', u'DotProductWithPadding', u'DotProductWithPaddingGradient', u'Dropout', u'DropoutGrad', u'EQ', u'ElementwiseLinear', u'ElementwiseLinearGradient', u'Elu', u'EluGradient', u'EnqueueBlobs', u'EnqueueRebatchingQueue', u'EnsureCPUOutput', u'EnsureDense', u'Exp', u'ExpandDims', u'ExtendTensor', u'FC', u'FCGradient', u'FCTransposed', u'FCTransposedGradient', u'FeedBlob', u'FileStoreHandlerCreate', u'Find', u'FindDuplicateElements', u'Flatten', u'FlattenToVec', u'FlexibleTopK', u'FlexibleTopKGradient', u'FloatToFused8BitRowwiseQuantized', u'FloatToRowwiseQuantized8Bits', u'Floor', u'Free', u'Ftrl', u'Fused8BitRowwiseQuantizedToFloat', u'GE', u'GRUUnit', u'GRUUnitGradient', u'GT', u'Gather', u'GatherByKey', u'GatherPadding', u'GatherRanges', u'GatherRangesToDense', u'GaussianFill', u'GenerateProposals', u'GenerateProposalsCPP', u'GetAllBlobNames', 'GetBlobRef', u'GivenTensorBoolFill', u'GivenTensorDoubleFill', u'GivenTensorFill', u'GivenTensorInt64Fill', u'GivenTensorIntFill', u'GivenTensorStringFill', u'Glu', u'HSoftmax', u'HSoftmaxGradient', u'HSoftmaxSearch', u'HasElements', u'HasScope', u'HuffmanTreeHierarchy', u'If', u'Im2Col', u'ImageInput', u'IndexFreeze', u'IndexGet', u'IndexHash', u'IndexLoad', u'IndexSize', u'IndexStore', u'InstanceNorm', u'InstanceNormGradient', u'IntIndexCreate', u'IsEmpty', u'IsMemberOf', u'Iter', u'KeySplit', u'KeyValueToMap', u'L1Distance', u'L1DistanceGradient', u'LC', u'LC1D', u'LC1DGradient', u'LC2D', u'LC2DGradient', u'LC3D', u'LC3DGradient', u'LCGradient', u'LE', u'LRN', u'LRNGradient', u'LSTMUnit', u'LSTMUnitGradient', u'LT', u'LabelCrossEntropy', u'LabelCrossEntropyGradient', u'LambdaRankNdcg', u'LambdaRankNdcgGradient', u'LastNWindowCollector', u'LayerNorm', u'LayerNormGradient', u'LeakyRelu', u'LeakyReluGradient', u'LearningRate', u'LengthsGather', u'LengthsIndicesInGradientSumGradient', u'LengthsMax', u'LengthsMaxWithMainInputAndForwardOutputGradient', u'LengthsMean', u'LengthsMeanGradient', u'LengthsPartition', u'LengthsRangeFill', u'LengthsSum', u'LengthsSumGradient', u'LengthsTile', u'LengthsToRanges', u'LengthsToSegmentIds', u'LengthsToShape', u'LengthsToWeights', u'LengthsTopK', u'LengthsTopKGradient', u'LengthsWeightedSum', u'LengthsWeightedSumGradient', u'LengthsWeightedSumWithMainInputGradient', u'Load', u'Log', 'LogInfo', u'Logit', u'LogitGradient', u'LongIndexCreate', u'LpNorm', u'LpNormGradient', u'LpPool', u'LpPoolGradient', u'MPIAllgather', u'MPIAllreduce', u'MPIBroadcast', u'MPICreateCommonWorld', u'MPIReceiveTensor', u'MPIReduce', u'MPISendTensor', u'MSRAFill', u'MakeTwoClass', u'MakeTwoClassGradient', u'MapToKeyValue', u'MarginRankingCriterion', u'MarginRankingCriterionGradient', u'MatMul', u'Max', u'MaxGradient', u'MaxPool', u'MaxPool1D', u'MaxPool1DGradient', u'MaxPool2D', u'MaxPool2DGradient', u'MaxPool3D', u'MaxPool3DGradient', u'MaxPoolGradient', u'MergeDim', u'MergeIdLists', u'Min', u'MinGradient', u'Mod', u'MomentumSGD', u'MomentumSGDUpdate', u'Mul', u'MultiClassAccuracy', u'NCHW2NHWC', u'NGramFromCategorical', u'NHWC2NCHW', 'Name', u'NanCheck', u'NegateGradient', u'Negative', 'NextBlob', 'NextName', 'NextScopedBlob', u'Normalize', u'NormalizeGradient', u'NormalizeL1', u'NormalizePlanarYUV', u'Not', 'NumObservers', u'ONNXWhile', u'OneHot', u'Or', u'PRelu', u'PReluGradient', u'PackRNNSequence', u'PackRecords', u'PackSegments', u'PackedInt8BGRANHWCToNCHWCStylizerPreprocess', u'PadEmptySamples', u'PadImage', u'PadImageGradient', u'PairWiseLoss', u'PairWiseLossGradient', u'Partition', u'Percentile', u'Perplexity', u'PiecewiseLinearTransform', 'PopulateProtoWithFileName', u'Pow', u'PrependDim', u'Print', 'Proto', 'Python', u'PythonDLPack', u'PythonDLPackGradient', u'PythonGradient', u'QuantDecode', u'QuantDecodeGradient', u'RMACRegions', u'Range', u'RangeFill', u'ReadNextBatch', u'ReadRandomBatch', u'ReceiveTensor', u'RecurrentNetwork', u'RecurrentNetworkBlobFetcher', u'RecurrentNetworkGradient', u'Reduce', u'ReduceBackMax', u'ReduceBackMaxGradient', u'ReduceBackMean', u'ReduceBackMeanGradient', u'ReduceBackSum', u'ReduceBackSumGradient', u'ReduceFrontMax', u'ReduceFrontMaxGradient', u'ReduceFrontMean', u'ReduceFrontMeanGradient', u'ReduceFrontSum', u'ReduceFrontSumGradient', u'ReduceFrontWeightedSum', u'ReduceFrontWeightedSumGradient', u'ReduceScatter', u'ReduceTailSum', u'Relu', u'ReluGradient', u'RemoveDataBlocks', 'RemoveObserver', u'RemovePadding', u'ReplaceNaN', u'ReservoirSampling', u'ResetCounter', u'ResetCursor', u'Reshape', u'ResizeLike', u'ResizeNearest', u'ResizeNearestGradient', u'RetrieveCount', u'ReversePackedSegs', u'RmsProp', u'RoIAlign', u'RoIAlignGradient', u'RoIPool', u'RoIPoolGradient', u'RowMul', u'RowWiseSparseAdagrad', u'RowWiseSparseAdam', u'Rowwise8BitQuantizedToFloat', u'RowwiseMax', u'RowwiseMaxGradient', 'RunAllOnGPU', 'RunAllOnMKL', u'SafeDequeueBlobs', u'SafeEnqueueBlobs', u'Save', u'Scale', u'ScatterAssign', u'ScatterWeightedSum', u'SegmentIdsToLengths', u'SegmentIdsToRanges', u'SegmentOneHot', u'Selu', u'SeluGradient', u'SendTensor', u'SequenceMask', u'Shape', u'Sigmoid', u'SigmoidCrossEntropyWithLogits', u'SigmoidCrossEntropyWithLogitsGradient', u'SigmoidGradient', u'Sign', u'Sin', u'SinGradient', u'SinusoidPositionEncoding', u'Size', u'Slice', u'SliceGradient', u'Snapshot', u'Softmax', u'SoftmaxGradient', u'SoftmaxWithLoss', u'SoftmaxWithLossGradient', u'Softplus', u'SoftplusGradient', u'Softsign', u'SoftsignGradient', u'SortAndShuffle', u'SortedSegmentMean', u'SortedSegmentMeanGradient', u'SortedSegmentRangeLogMeanExp', u'SortedSegmentRangeLogMeanExpGradient', u'SortedSegmentRangeLogSumExp', u'SortedSegmentRangeLogSumExpGradient', u'SortedSegmentRangeMax', u'SortedSegmentRangeMaxGradient', u'SortedSegmentRangeMean', u'SortedSegmentRangeMeanGradient', u'SortedSegmentRangeSum', u'SortedSegmentRangeSumGradient', u'SortedSegmentSum', u'SortedSegmentSumGradient', u'SortedSegmentWeightedSum', u'SortedSegmentWeightedSumGradient', u'SpaceToBatch', u'SparseAdagrad', u'SparseAdam', u'SparseFtrl', u'SparseLengthsIndicesInGradientSumGradient', u'SparseLengthsIndicesInGradientWeightedSumGradient', u'SparseLengthsIndicesInGradientWeightedSumWithMainInputGradient', u'SparseLengthsMean', u'SparseLengthsMean8BitsRowwise', u'SparseLengthsMeanFused8BitRowwise', u'SparseLengthsMeanGradient', u'SparseLengthsSum', u'SparseLengthsSum8BitsRowwise', u'SparseLengthsSumFused8BitRowwise', u'SparseLengthsSumGradient', u'SparseLengthsWeightedMean8BitsRowwise', u'SparseLengthsWeightedSum', u'SparseLengthsWeightedSum8BitsRowwise', u'SparseLengthsWeightedSumFused8BitRowwise', u'SparseLengthsWeightedSumGradient', u'SparseLengthsWeightedSumWithMainInputGradient', u'SparseMomentumSGDUpdate', u'SparseNormalize', u'SparseSortedSegmentMean', u'SparseSortedSegmentMeanGradient', u'SparseSortedSegmentSum', u'SparseSortedSegmentSumGradient', u'SparseSortedSegmentWeightedSum', u'SparseSortedSegmentWeightedSumGradient', u'SparseToDense', u'SparseToDenseMask', u'SparseToDenseMaskGradient', u'SparseUnsortedSegmentMean', u'SparseUnsortedSegmentMeanGradient', u'SparseUnsortedSegmentSum', u'SparseUnsortedSegmentSumGradient', u'SparseUnsortedSegmentWeightedSum', u'SparseUnsortedSegmentWeightedSumGradient', u'SpatialBN', u'SpatialBNGradient', u'SpatialSoftmaxWithLoss', u'SpatialSoftmaxWithLossGradient', u'Split', u'Sqr', u'SquareRootDivide', u'SquaredL2Distance', u'SquaredL2DistanceGradient', u'Squeeze', u'StatRegistryCreate', u'StatRegistryExport', u'StatRegistryUpdate', u'StopGradient', u'StoreAdd', u'StoreGet', u'StoreSet', u'StoreWait', u'StringEndsWith', u'StringIndexCreate', u'StringJoin', u'StringPrefix', u'StringStartsWith', u'StringSuffix', u'Sub', u'Sum', u'SumElements', u'SumElementsGradient', u'SumInt', u'SumReduceLike', u'SumSqrElements', u'Summarize', u'Swish', u'SwishGradient', u'TT', u'TTLinearGradient', u'Tanh', u'TanhGradient', u'TensorProtosDBInput', u'TensorVectorSize', u'TextFileReaderRead', u'ThresholdedRelu', u'ThresholdedReluGradient', u'Tile', u'TileGradient', u'TimerBegin', u'TimerEnd', u'TimerGet', u'TimerGetAndEnd', u'TopK', u'TopKGradient', u'Transpose', u'TrimDataset', u'UnPackRecords', u'UniformFill', u'UniformIntFill', u'Unique', u'UniqueUniformFill', u'UnpackRNNSequence', u'UnpackSegments', u'UnsafeCoalesce', u'UnsortedSegmentMean', u'UnsortedSegmentMeanGradient', u'UnsortedSegmentSum', u'UnsortedSegmentSumGradient', u'UnsortedSegmentWeightedSum', u'UnsortedSegmentWeightedSumGradient', 'UsedBlobNames', 'UsesBlob', u'WallClockTime', u'WeightedSample', u'WeightedSampleDequeueBlobs', u'WeightedSigmoidCrossEntropyWithLogits', u'WeightedSigmoidCrossEntropyWithLogitsGradient', u'WeightedSum', u'WeightedSumGradient', u'Where', u'While', u'XavierFill', u'Xor', u'YellowFin', u'ZeroGradient', '_CheckLookupTables', '_CreateAndAddToSelf', '_ExtendOps', '_InvalidateLookupTables', '_RecreateLookupTables', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__format__', '__getattr__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_attr_dict', '_external_input_map', '_get_next_net_name', '_input_record', '_net', '_net_names_used', '_next_name_index', '_op_outputs', '_output_record', '_recreate_lookup_tables', '_registered_blob_names', 'add_attribute', 'current_prefix', 'extend_ops', 'external_inputs', 'external_outputs', 'get_attributes', 'input_record', 'is_external_input', 'operator_registry_', 'output_record', 'recover_input_record_by_prefix', 'recover_output_record_by_prefix', u'rnn_internal_accumulate_gradient_input', u'rnn_internal_apply_link', 'set_input_record', 'set_output_record', 'set_rand_seed']\n"
     ]
    }
   ],
   "source": [
    "#########################################################################################################\n",
    "printmd(\"**2) Proto Function**\")\n",
    "print(\"First network proto:\\n\\n{}\".format(net1.Proto()))\n",
    "print(\"Second network proto:\\n\\n{}\".format(net2.Proto()))\n",
    "#########################################################################################################\n",
    "\n",
    "#########################################################################################################\n",
    "printmd(\"**3) Net.SomeOperator**\")\n",
    "#Adding an operator to first net\n",
    "X = net1.GaussianFill([], [\"X\"], mean=0.0, std=1.0, shape=[2, 3], run_once=0)\n",
    "Y = net2.GaussianFill([], [\"Y\"], mean=1.0, std=3.0, shape=[6, 9], run_once=0)\n",
    "print(\"First network proto:\\n\\n{}\".format(net1.Proto()))\n",
    "print(\"Second network proto:\\n\\n{}\".format(net2.Proto()))\n",
    "print (\"Added Gaussian Filler to the nets\")\n",
    "printmd(\"**A completes list of functions of net -> Operators, Layers, Fillers, Initializers, Optimizers**\")\n",
    "print(dir(net1))\n",
    "#########################################################################################################"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**4) AppendNet**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Appended network proto:\n",
      "\n",
      "name: \"first_net\"\n",
      "op {\n",
      "  output: \"X\"\n",
      "  name: \"\"\n",
      "  type: \"GaussianFill\"\n",
      "  arg {\n",
      "    name: \"std\"\n",
      "    f: 1.0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"run_once\"\n",
      "    i: 0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 2\n",
      "    ints: 3\n",
      "  }\n",
      "  arg {\n",
      "    name: \"mean\"\n",
      "    f: 0.0\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"Y\"\n",
      "  name: \"\"\n",
      "  type: \"GaussianFill\"\n",
      "  arg {\n",
      "    name: \"std\"\n",
      "    f: 3.0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"run_once\"\n",
      "    i: 0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 6\n",
      "    ints: 9\n",
      "  }\n",
      "  arg {\n",
      "    name: \"mean\"\n",
      "    f: 1.0\n",
      "  }\n",
      "}\n",
      "\n",
      "Added net2 to net1\n"
     ]
    }
   ],
   "source": [
    "#########################################################################################################\n",
    "printmd(\"**4) AppendNet**\")\n",
    "net1 = net1.AppendNet(net2)\n",
    "print(\"Appended network proto:\\n\\n{}\".format(net1.Proto()))\n",
    "print (\"Added net2 to net1\")\n",
    "#########################################################################################################"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**5) BlobIsDefined**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Net1 has blob X:  True\n",
      "Net1 has blob Z:  False\n",
      "Function BlobIsDefined Tested\n"
     ]
    },
    {
     "data": {
      "text/markdown": [
       "**6) BlobIsDefined**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Net1 has blobs:  set([u'Y', u'X'])\n",
      "Function UsedBlobNames Tested\n"
     ]
    },
    {
     "data": {
      "text/markdown": [
       "**6) Clone**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cloned network net3 proto:\n",
      "\n",
      "name: \"third_network\"\n",
      "op {\n",
      "  output: \"X\"\n",
      "  name: \"\"\n",
      "  type: \"GaussianFill\"\n",
      "  arg {\n",
      "    name: \"std\"\n",
      "    f: 1.0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"run_once\"\n",
      "    i: 0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 2\n",
      "    ints: 3\n",
      "  }\n",
      "  arg {\n",
      "    name: \"mean\"\n",
      "    f: 0.0\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"Y\"\n",
      "  name: \"\"\n",
      "  type: \"GaussianFill\"\n",
      "  arg {\n",
      "    name: \"std\"\n",
      "    f: 3.0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"run_once\"\n",
      "    i: 0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 6\n",
      "    ints: 9\n",
      "  }\n",
      "  arg {\n",
      "    name: \"mean\"\n",
      "    f: 1.0\n",
      "  }\n",
      "}\n",
      "\n",
      "Function Clone Tested\n"
     ]
    }
   ],
   "source": [
    "#########################################################################################################\n",
    "printmd(\"**5) BlobIsDefined**\")\n",
    "print \"Net1 has blob X: \", net1.BlobIsDefined(\"X\")\n",
    "print \"Net1 has blob Z: \", net1.BlobIsDefined(\"Z\")\n",
    "print(\"Function BlobIsDefined Tested\")\n",
    "#########################################################################################################\n",
    "\n",
    "#########################################################################################################\n",
    "printmd(\"**6) BlobIsDefined**\")\n",
    "print \"Net1 has blobs: \", net1.UsedBlobNames()\n",
    "print(\"Function UsedBlobNames Tested\")\n",
    "#########################################################################################################\n",
    "\n",
    "\n",
    "#########################################################################################################\n",
    "printmd(\"**6) Clone**\")\n",
    "net3 = net1.Clone(\"third_network\")\n",
    "print(\"Cloned network net3 proto:\\n\\n{}\".format(net3.Proto()))\n",
    "print(\"Function Clone Tested\")\n",
    "#########################################################################################################"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.3. Simple FC Layer using Core.Net Operator\n",
    "\n",
    "Below is an example of creating a **Fully Connected Layer** of CNN. The intricate details of the layer will be dealt in detail during the upcoming sections of the course. \n",
    "\n",
    "To create a just a simple fully functional FC Layer using core.Net one has to write **several lines of code**, this is the reason model_helpers were created and why we **won't** be using core.Net directly in our course."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Current network proto:\n",
      "\n",
      "name: \"sample_fc_layer\"\n",
      "op {\n",
      "  output: \"X\"\n",
      "  name: \"\"\n",
      "  type: \"GaussianFill\"\n",
      "  arg {\n",
      "    name: \"std\"\n",
      "    f: 1.0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"run_once\"\n",
      "    i: 0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 2\n",
      "    ints: 3\n",
      "  }\n",
      "  arg {\n",
      "    name: \"mean\"\n",
      "    f: 0.0\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"W\"\n",
      "  name: \"\"\n",
      "  type: \"GaussianFill\"\n",
      "  arg {\n",
      "    name: \"std\"\n",
      "    f: 1.0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"run_once\"\n",
      "    i: 0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 5\n",
      "    ints: 3\n",
      "  }\n",
      "  arg {\n",
      "    name: \"mean\"\n",
      "    f: 0.0\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"b\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"run_once\"\n",
      "    i: 0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 5\n",
      "  }\n",
      "  arg {\n",
      "    name: \"value\"\n",
      "    f: 1.0\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"X\"\n",
      "  input: \"W\"\n",
      "  input: \"b\"\n",
      "  output: \"Y\"\n",
      "  name: \"\"\n",
      "  type: \"FC\"\n",
      "}\n",
      "\n"
     ]
    }
   ],
   "source": [
    "#Adopted from: https://caffe2.ai/docs/tutorial-basics-of-caffe2.html\n",
    "workspace.ResetWorkspace()\n",
    "network = core.Net(\"sample_fc_layer\")\n",
    "X = network.GaussianFill([], [\"X\"], mean=0.0, std=1.0, shape=[2, 3], run_once=0)\n",
    "W = network.GaussianFill([], [\"W\"], mean=0.0, std=1.0, shape=[5, 3], run_once=0)\n",
    "b = network.ConstantFill([], [\"b\"], shape=[5,], value=1.0, run_once=0)\n",
    "\n",
    "Y = X.FC([W, b], [\"Y\"]) #Here X becomes the input to Y with W, b as weights and biases.\n",
    "print(\"Current network proto:\\n\\n{}\".format(network.Proto()))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.4. Network Drawer\n",
    "\n",
    "It is a common practice in Deep Learning to visualize network architectures.\n",
    "\n",
    "Here in caffe2, it is done using the net_drawer function which takes in the protobuf network object and converts into readable image formats\n",
    "\n",
    "In our case, lets vidualize the FC layer created above"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 7,
     "metadata": {
      "image/png": {
       "width": 800
      }
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "graph = net_drawer.GetPydotGraph(network, rankdir=\"LR\")\n",
    "Image(graph.create_png(), width=800)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.5. Running a network if created using core-net\n",
    "\n",
    "If a network is created using core.Net the usual steps to run the network are\n",
    "\n",
    "1) Create the network architecture\n",
    "\n",
    "2) Add Gradient to each operator/layer (To ensure backpropragation)\n",
    "\n",
    "3) Add Optimizers and other hyperparameters\n",
    "\n",
    "4) Initialize the network weights and biases using workspace.RunNetworkOnce() \n",
    "\n",
    "5) Create a runnable network using workspace.CreateNet()\n",
    "\n",
    "6) Run the created network for a required number of iterations using workspace.RunNet()\n",
    "\n",
    "\n",
    "We will demonstrate a sample run for the FC layer created above. We **wont** add gradient Ops.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**Running the network created using core.Net**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Initialized Blobs in the workspace after execution: [u'W', u'X', u'Y', u'b']\n",
      "W:\n",
      "[[ 0.2859182  -3.093014   -1.1752913 ]\n",
      " [ 0.18659304 -0.02438713  0.9217288 ]\n",
      " [-0.01841062 -1.6355196  -0.20877817]\n",
      " [ 0.6162049  -1.0640212  -0.96673346]\n",
      " [ 0.04988097  0.06246159 -0.09283951]]\n",
      "X:\n",
      "[[ 2.05487     0.19210097  0.2937338 ]\n",
      " [-0.07072681  0.30044422  0.22667103]]\n",
      "Y:\n",
      "[[ 0.64813095  1.6494825   0.5866585   1.7778592   1.0872277 ]\n",
      " [-0.21590471  1.1884052   0.46259576  0.41760832  0.99419427]]\n",
      "b:\n",
      "[1. 1. 1. 1. 1.]\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "Blobs in the workspace after complete execution: [u'W', u'X', u'Y', u'b']\n",
      "W:\n",
      "[[ 0.88971484 -0.36625662  0.33271927]\n",
      " [-0.30997086 -1.8750341   0.41151717]\n",
      " [-0.4214546  -0.29120263  0.19554885]\n",
      " [-0.7867059  -0.5540945   1.5522885 ]\n",
      " [ 0.6641489   0.770698   -0.18224156]]\n",
      "X:\n",
      "[[ 0.08811291 -0.630764   -0.18251295]\n",
      " [ 0.55267256  0.5101973  -0.07348192]]\n",
      "Y:\n",
      "[[ 1.2486913   2.0802844   1.1108544   0.9968711   0.605653  ]\n",
      " [ 1.280409   -0.15818882  0.6041335   0.16844654  1.7736564 ]]\n",
      "b:\n",
      "[1. 1. 1. 1. 1.]\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "Sample demo for running the network created using core.Net complete\n"
     ]
    }
   ],
   "source": [
    "printmd(\"**Running the network created using core.Net**\")\n",
    "workspace.ResetWorkspace()\n",
    "\n",
    "workspace.RunNetOnce(network)\n",
    "print(\"Initialized Blobs in the workspace after execution: {}\".format(workspace.Blobs()))\n",
    "for name in workspace.Blobs():\n",
    "    print(\"{}:\\n{}\".format(name, workspace.FetchBlob(name)))\n",
    "\n",
    "print \"\\n\"\n",
    "print \"\\n\"\n",
    "\n",
    "workspace.CreateNet(network)\n",
    "#Running for 1000 iterations\n",
    "for i in range(1000): \n",
    "    workspace.RunNet(network.Proto().name)\n",
    "print(\"Blobs in the workspace after complete execution: {}\".format(workspace.Blobs()))\n",
    "for name in workspace.Blobs():\n",
    "    print(\"{}:\\n{}\".format(name, workspace.FetchBlob(name)))\n",
    "print \"\\n\"\n",
    "print \"\\n\"\n",
    "print \"Sample demo for running the network created using core.Net complete\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2. General Helpers\n",
    "\n",
    "These are the genral helper functions caffe2 has in order to facilitate non-network related operations\n",
    "\n",
    "To get more details on the file refer to: https://github.com/caffe2/caffe2/blob/master/caffe2/python/tutorials/helpers.py\n",
    "\n",
    "Created for tutorial purposes and serves the functions of loading and transforming image data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.1. Functions \n",
    "The functions involved in it are:\n",
    "\n",
    "1) load -> Load image using scikit. To know more about scikit vist: http://scikit-image.org/\n",
    "\n",
    "2) bgr -> Convert rgb image to bgr\n",
    "\n",
    "3) chw -> Arrangement(height, width, channel) to Arrangment(channel, height, width)\n",
    "\n",
    "4) crop_center -> Using center of image to crop it using specified height and width\n",
    "\n",
    "5) rescale -> Changing image resolution\n",
    "\n",
    "6) load to NCHW -> Load image, Rescale, Crop, Apply chw, apply bgr, apply mean_subtraction, and add a new dimension to enable loading onto caffe. N-> Batch size, C->Channels, H->Height, W->Width\n",
    "\n",
    "Let's take up a few helper functions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loaded image shape:  (2988, 5312, 3)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/abhi/.virtualenvs/caffe2_test/local/lib/python2.7/site-packages/skimage/transform/_warps.py:84: UserWarning: The default mode, 'constant', will be changed to 'reflect' in skimage 0.15.\n",
      "  warn(\"The default mode, 'constant', will be changed to 'reflect' in \"\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Rescaled image shape:  (150, 177, 3)\n",
      "Transformed shape:  (3, 150, 177)\n"
     ]
    },
    {
     "data": {
      "text/markdown": [
       "**Study the base helpers python file and apply more functions onto your test images**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from caffe2.python.tutorials import helpers\n",
    "\n",
    "img = helpers.load(\"images/test.jpeg\")\n",
    "print \"Loaded image shape: \", img.shape\n",
    "\n",
    "img = helpers.rescale(img, 100, 150)\n",
    "print \"Rescaled image shape: \", img.shape\n",
    "\n",
    "img = helpers.chw(img)\n",
    "print \"Transformed shape: \", img.shape\n",
    "\n",
    "printmd(\"**Study the base helpers python file and apply more functions onto your test images**\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3. General Model Helper\n",
    "\n",
    "The standard helper module that is used to manage, train and test networks.\n",
    "\n",
    "### 3.1 Import Details\n",
    "It is a wrapper on top of \n",
    "\n",
    "1) caffe2.python Core -> In turn, it automatically imports all the basic functions of caffe2.python.Core.Net\n",
    "\n",
    "2) caffe2.python Helpers -> This folder, https://github.com/caffe2/caffe2/tree/master/caffe2/python/helpers, contains \n",
    "        \n",
    "        2.1 Basic algebraic functions\n",
    "        2.2 Non-linear activation functions\n",
    "        2.3 Base CNN layers\n",
    "        2.4 Training helper functions\n",
    "        \n",
    "3) caffe2.python Modelling -> This folder, https://github.com/caffe2/caffe2/tree/master/caffe2/python/modeling, contains\n",
    "        \n",
    "        3.1 Initializers\n",
    "        3.2 Parameter Info Reader Helper Function\n",
    "        \n",
    "4) caffe2.python Regularizers"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.2. Functions\n",
    "\n",
    "At present (as for 27th March, 2018), the **functions that model_helper incorporates** are\n",
    "\n",
    "1) Base Layers:\n",
    "\n",
    "        1.1 Flatten\n",
    "        1.2 MatMul\n",
    "        1.3 Squeeze\n",
    "        1.4 Transpose\n",
    "        1.5 FlattenToVec\n",
    "    \n",
    "\n",
    "2) Optimizers\n",
    "    \n",
    "        2.1 Adam\n",
    "        2.2 Adagrad\n",
    "        2.3 SparseAdagrad\n",
    "        2.4 YellowFin\n",
    " \n",
    "\n",
    "3) Fillers\n",
    "    \n",
    "        3.1 ConstantFill\n",
    "\n",
    "4) Activation Functions\n",
    "\n",
    "        4.1 Add\n",
    "        4.2 NCCLAllreduce\n",
    "        4.3 PRelu\n",
    "        4.4 Scale\n",
    "        4.5 Sigmoid\n",
    "        4.6 Softmax\n",
    "        4.7 TanH\n",
    "\n",
    "\n",
    "5) General Functions\n",
    "\n",
    "        5.1 Accuracy\n",
    "        5.2 Cast\n",
    "        5.3 Checkpoint\n",
    "        5.4 Copy\n",
    "        5.5 CopuGPUToCPU\n",
    "        5.6 CopyCPUToGPU\n",
    "        5.7 DequeueBlobs\n",
    "        5.8 EnsureCPUOutput\n",
    "        5.9 ExpandDims\n",
    "        5.10 LearningRate\n",
    "        5.11 MakeTwoClass\n",
    "        5.12 NHWC2NCHW\n",
    "        5.13 PackSegments\n",
    "        5.14 Print\n",
    "        5.15 StopGradient\n",
    "        5.16 Summarize\n",
    "        5.17 UnpackSegments\n",
    "        \n",
    "\n",
    "6) Loss and Reduce functions\n",
    "\n",
    "        6.1 AveragedLoss\n",
    "        6.2 LabelCrossEntropy\n",
    "        6.3 ScatterWeightedSum\n",
    "        6.4 SortedSegmentSum\n",
    "        6.5 SoftmaxWithLoss\n",
    "        6.6 SquaredL2Distance\n",
    "        6.7 WeightedSum\n",
    "        6.8 ReduceFrontSum\n",
    "\n",
    "\n",
    "\n",
    "7) Training/Testing helper functions\n",
    "\n",
    "        7.1 AddGradientOperators -> Enable backpropagation with loss\n",
    "        7.2 AddParameter -> Add parameteres to monitors during training\n",
    "        7.3 GetAllParams & GetComputedParams\n",
    "        7.4 GetDevices -> Get Devices on which the net will run\n",
    "        7.5 GetOptimizationParamInfo & GetParams\n",
    "        7.6 Proto -> For getting summary of network\n",
    "        7.7 TensorProtosDBInput -> Loading and transforming data as input layer onto DB\n",
    "\n",
    "\n",
    "8) model_helpers had **net** functionality, which is the wrapper onto caffe2.python.Core.Net module.\n",
    "\n",
    "**Note: All the above will be studies in detail during the later sections of this course**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.3. Assistive Funcationalities of Model Helpers\n",
    "\n",
    "**The main functionalities of model_helper are**:\n",
    "\n",
    "1) Creating an outer shell (A Protobuf Object) which can hold the all necessary objects. \n",
    "\n",
    "2) Holding input data blobs\n",
    "\n",
    "3) Holding network objects created using Core.Net, model_helper.net, or Brew, or CNN Model Helpers.  \n",
    "\n",
    "4) Holding Training Parameters such as Loss, Accuracies, Optimizers.\n",
    "\n",
    "5) Logging Network Summaries\n",
    "\n",
    "6) Helping workspace to initialize network parameters\n",
    "\n",
    "7) Helping workspace to create a trainable network.\n",
    "\n",
    "8) Helping workspace to validate and test a trained network\n",
    "\n",
    "Below Is an example of how model_helpers facilitates the 8 functions mentioned above. \n",
    "\n",
    "**Note: Please ignore the intracate functions used to demonstrate the steps mentioned above**\n",
    "\n",
    "This will be studied at a later point in this notebook this notebook. Refer to the section: Explaining - Assistive Funcationalities of Model Helpers"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.4 FC Layer using Model Helpers\n",
    "\n",
    "Lets create a simple FC Layer using Model Helper as we did using core.Net"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 10,
     "metadata": {
      "image/png": {
       "width": 800
      }
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "arg_scope = {\"order\": \"NCHW\"}\n",
    "train_model = model_helper.ModelHelper(name=\"mnist_train\", arg_scope=arg_scope)\n",
    "X = train_model.net.GaussianFill([],'X', mean=0.0, std=1.0, shape=[2, 3])\n",
    "W = train_model.net.GaussianFill([],'W',  mean=0.0, std=1.0, shape=[5, 3])\n",
    "b = train_model.net.ConstantFill([],'b', shape=[5,], value=1.0)\n",
    "Y = train_model.net.FC(['X', 'W', 'b'], 'Y', dim_in=50 * 4 * 4, dim_out=500)\n",
    "\n",
    "graph = net_drawer.GetPydotGraph(train_model, rankdir=\"LR\")\n",
    "Image(graph.create_png(), width=800)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.5. CNN using Model Helper\n",
    "\n",
    "Model Helper acts as **a wrapper on top of Core.Net**.\n",
    "\n",
    "The Operators that model_helper.ModelHelper.net supports (as of 27th March 2018) include all the sub-functions that core.Net module has.\n",
    "\n",
    "**Note: Each of the supported operator, layer, optimizer, loss function, will be discussed in detail in later sections of this course** \n",
    "\n",
    "Lets create a sample CNN network usong model_helpers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# At this stage you may ignore what convolution or pooling means\n",
    "train_model = model_helper.ModelHelper(name=\"mnist_train\", arg_scope=arg_scope)\n",
    "conv1 = train_model.net.Conv('data', 'conv1', dim_in=1, dim_out=20, kernel=5)\n",
    "pool1 = train_model.net.MaxPool(conv1, 'pool1', kernel=2, stride=2)\n",
    "conv2 = train_model.net.Conv(pool1, 'conv2', dim_in=20, dim_out=50, kernel=5)\n",
    "pool2 = train_model.net.MaxPool(conv2, 'pool2', kernel=2, stride=2)\n",
    "fc3 = train_model.net.FC(pool2, 'fc3', dim_in=50 * 4 * 4, dim_out=500)\n",
    "fc3 = train_model.net.Relu(fc3, 'relu3')\n",
    "pred = train_model.net.FC(fc3, 'pred', dim_in=500, dim_out=10)\n",
    "softmax = train_model.net.Softmax(pred, 'softmax')\n",
    "\n",
    "graph = net_drawer.GetPydotGraph(train_model, rankdir=\"TD\")\n",
    "Image(graph.create_png())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 4. Brew\n",
    "\n",
    "Those who are aware of Keras Library would easily understand why caffe2 opted to create Brew module. It's major functionality to ease the process of network creation and management.\n",
    "\n",
    "For more intricate details refer to: https://github.com/caffe2/caffe2/blob/master/caffe2/python/brew.py\n",
    "\n",
    "**Note: Brew is still in development phase, so not all operators are supported by brew**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.1. Import Details\n",
    "\n",
    "The two major imports that brew makes are\n",
    "\n",
    "1) The entire caffe2.python.model_helpers module\n",
    "\n",
    "2) caffe2.python Helpers -> This folder, https://github.com/caffe2/caffe2/tree/master/caffe2/python/helpers, contains\n",
    "\n",
    "Brew can be imported from **caffe2.python** module"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.2 Supported Operators\n",
    "\n",
    "At present (As per 27th March 2018), Brew supports the following functions\n",
    "\n",
    "1) Base Layers:\n",
    "\n",
    "        1.1 fc\n",
    "        1.2 packed_fc\n",
    "        1.3 fc_decomp\n",
    "        1.4 fc_sparse\n",
    "        1.5 fc_prune\n",
    "        1.6 dropout\n",
    "        1.7 max_pool\n",
    "        1.8 average_pool\n",
    "        1.9 max_pool_with_index\n",
    "        1.10 lrn\n",
    "        1.11 instance_norm\n",
    "        1.12 spatial_bn\n",
    "        1.13 concat\n",
    "        1.14 depth_concat\n",
    "        1.15 transpose\n",
    "        1.16 conv\n",
    "        1.17 conv_nd\n",
    "        1.18 conv_transpose\n",
    "        1.19 group_conv\n",
    "        1.20 group_conv_deprecated\n",
    "        1.21 elementwise_linear\n",
    "        1.22 layer_norm\n",
    "        1.23 batch_mat_mul\n",
    "        \n",
    "    \n",
    "\n",
    "2) Optimizers\n",
    "    \n",
    "        None\n",
    " \n",
    "\n",
    "3) Fillers\n",
    "    \n",
    "        None\n",
    "        \n",
    "\n",
    "4) Activation Functions\n",
    "\n",
    "        4.1 softmax\n",
    "        4.2 relu\n",
    "        4.3 prelu\n",
    "        4.4 tanh\n",
    "        \n",
    "\n",
    "5) General Functions\n",
    "\n",
    "        5.1 arg_scope\n",
    "        5.2 sum\n",
    "        5.3 image_input\n",
    "        5.4 video_input\n",
    "        5.5 cond\n",
    "        5.6 loop\n",
    "        5.7 db_input        \n",
    "        \n",
    "\n",
    "6) Loss and Reduce functions\n",
    "\n",
    "        None\n",
    "\n",
    "\n",
    "7) Training/Testing helper functions\n",
    "\n",
    "        7.1 iter\n",
    "        7.2 accuracy\n",
    "        7.3 add_weight_decay\n",
    "        \n",
    "\n",
    "\n",
    "**Note: All the above will be studies in detail during the later sections of this course**\n",
    "       \n",
    "      \n",
    "        '        \n",
    "        \n",
    "        \n",
    "        \n",
    "        "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.3 Why Brew?\n",
    "\n",
    "**IF compared to model_helpers**, at present stage of development, Brew provides assistance in creating the network rather than managing and training it.\n",
    "\n",
    "While creating networks, weight initialization is a crucial part (Will be discussed in detail in our course). IF created using model_helpers it takes several lines of code to add initial weights.\n",
    "\n",
    "But when using brew, it is handled by the wrapper itself. See the example below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Adopted from: https://caffe2.ai/docs/brew.html\n",
    "\n",
    "dim_in=10\n",
    "dim_out=20\n",
    "\n",
    "# Using model helpers\n",
    "model_h = model_helper.ModelHelper(name=\"train\")\n",
    "weights = model_h.param_init_net.XavierFill(\n",
    "    [],\n",
    "    'FC_h' + '_w',\n",
    "    shape=[dim_out, dim_in]\n",
    ")\n",
    "bias = model_h.param_init_net.ConstantFill(\n",
    "    [],\n",
    "    'FC_h' + '_b',\n",
    "    shape=[dim_out, ]\n",
    ")\n",
    "FC_h = model_h.net.FC(['data', weights, bias], 'FC_h', dim_in=dim_in, dim_out=dim_out)\n",
    "\n",
    "\n",
    "# Using brew\n",
    "model_b = model_helper.ModelHelper(name=\"train\")\n",
    "FC_Brew = brew.fc(model_b, 'data', 'fc_h', weight_init=('XavierFill', {}), \\\n",
    "                  bias_init=('XavierFill', {}), dim_in=dim_in, dim_out=dim_out)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 13,
     "metadata": {
      "image/png": {
       "width": 800
      }
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# The model_helpers one\n",
    "graph = net_drawer.GetPydotGraph(model_h, rankdir=\"LR\")\n",
    "Image(graph.create_png(), width=800)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 14,
     "metadata": {
      "image/png": {
       "width": 800
      }
     },
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# The brew one\n",
    "graph = net_drawer.GetPydotGraph(model_b, rankdir=\"LR\")\n",
    "Image(graph.create_png(), width=800)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Why brew? - Continued\n",
    "\n",
    "Also, by using ArgScope we can add the repetitive parameters onto the scope, parameters such as Initializers, and create the network under the same scope. \n",
    "\n",
    "As the course progresses, we will keep using ArgScope in the later sections of the course."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.4 Creating Network using brew and observing the difference\n",
    "\n",
    "Earlier we created a CNN network using model_helpers, lets repeat the same using brew.\n",
    "\n",
    "As you will see, the difference would be, initialization will be done here for each layer unlike simple model_helpers. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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/fffryFDhighIUHGGH3yySeKjY1V+fLldfz4cUVHR6tIkSK6++67tXHjRknSwoULVaxYMTkcDo0aNcp77unTp8vpdGrmzJnZ9vUsXbpUgYGBKlSokL777judPn1aPXr0kMPhUNu2bbVp0yZJ0tq1a1W2bFnFxcVl27mR915Pl9qyZYvat2+vokWLqlWrVlq5cqVPznNLcvYW9QCA3KBy5cpmwoQJ2X5cj8dj7rvvPvP44497F4fatWuXcTqd5tL/cqpVq2aqVKlijDEmNTXVhIaGmlq1ankf1+8L0VzqevtkpwkTJpjKlSv75NiZRowYYRo0aODTc/xRWlqaiYqKMj169DAej8cYY8zMmTONJPPxxx+bM2fOmGrVqpnRo0d79zl27JipVq2aiYiIMKdOnTIHDhwwhQoVMpLMiy++aPbt22cWLlxoJJnmzZt795s6daqRZBYsWODdtm/fPvPXv/71itmu9DO/UQMGDDBBQUHm9OnTxhhjzp8/b0qVKmW6deuW5Wtv1aqVJYuWjRs3zlStWtWn5/j444+NJJOcnOzT81wqr76eMhdSGj58uPnqq6/MjBkzTMGCBU1gYKDZvn37LR3zViQnJ3u/l39EgQeAfMhXBf6tt94yksz69euzbM9cbTTTjBkzzMyZM40xF0t/lSpVjL+/v/fxK/3ne719slNeLfCTJk0yksy2bdu821JTU82bb75pTp06ZZ577jkjyRw+fDjLfnPmzDGSzLBhw4wxxlSvXj3LzzMjI8OULl3aBAYGerelpKSY8PBw89BDD3m3jRw50qxdu/aK2W6ncG3evNlIMtOmTfNu69ixoylYsKBJTEw0xhjzySefmBkzZtzS8W9XXi3wefX1lFngL/1eTp482Ugyffr0uaVj3oprFXim0AAAss1nn30mSbrjjjuybPfzy/rfTb9+/dS1a1dNmTJFY8eOVUpKitLT06957FvZB1ktXbpUklShQgXvtoCAAPXu3VthYWFasWKFJKlw4cJZ9mvdurUk6YcffpCkyxYJcjgcKlq0qFJTU73bAgMDNXjwYC1atEi7du1Samqqtm/frvr162f71xUZGam2bdtq5syZMsZo79698ng8SktL03vvvSdJeuedd9SjR49sP3d+lldfT5mCgoK8v+/cubMkacOGDT47382gwAMAss3evXslXX8RlOXLl6t27dqq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9u1q06aNBg4cqP79+2vLli3e1VRhPxR4AABuQIcOHfTLL78oNDRUTZs21bx586yOBFxXWlqaxowZo/r16yspKUmrVq2S2+1WwYIFrY6G20CBBwDgBlWsWFHffPONevfurUcffVT9+vVTamqq1bGAK2JBpryLAg8AwE0ICgrSlClT9OGHH2revHlq3ry59u7da3UswIsFmfI+CjwAALcgOjpaK1euVGpqqho3bqxFixZZHQnwLsj09ttvsyBTHkaBBwDgFlWvXl0rV65UdHS0OnTooMGDBystLc3qWMiH/rgg09atW1mQKQ+jwAMAcBuCg4M1a9Ysvf3225o9e7batWunw4cPWx0L+QgLMuU/FHgAALLBY489phUrVujw4cOqV6+eFi9ebHUk5HEsyJR/UeABAMgm9erV09q1a3XvvffqgQce0JgxY5SRkWF1LOQxly7ItGnTJhZkyoco8AAAZKPChQvrv//9r9544w2NHz9eUVFROnbsmNWxkEf8cUGmzZs3syBTPkSBBwDAB2JjY7VixQrt3btXjRo10g8//GB1JNgYCzLhUhR4AAB8pFGjRlq1apXq1KmjNm3aaMKECTLGWB0LNsOCTPgjCjwAAD5UvHhxffbZZ3r55Zc1atQoRUdH6/Tp01bHgg2wIBOuhgIPAICPORwODR48WIsXL9bKlSvVuHFjrVu3zupYyMVYkAnXQoEHACCHtGnTRuvXr1dERISaNWumKVOmWB0JuQwLMuFGUOABAMhBJUuW1Oeffy6Xy6UhQ4aoZ8+eSkpKsjoWcgEWZMKNosADAJDDnE6nxowZo08//VSff/65GjVqpE2bNlkdCxZhQSbcLAo8AAAWeeihh/TLL78oLCxMzZo103vvvWd1JOQgFmTCraLAAwBgofDwcH333Xd68skn1b17dz322GO6cOGC1bHgYyzIhNtBgQcAwGL+/v5yu9368MMPtWDBArVs2VK7d++2OhZ8gAWZkB0o8AAA5BKdO3fWypUr5fF41KBBA73//vtWR0I2YkEmZBcKPAAAuUi1atX0008/qVevXuratasGDx6stLQ0q2PhNly6IFOxYsVYkAm3jQIPAEAuExwcrClTpmjOnDn697//rXvvvVeHDh2yOhZuwR8XZFqyZAkLMuG2UeABAMilevbsqdWrVyshIUH16tXTl19+aXUk3CAWZIIvUeABAMjFatasqZ9++knt2rXTAw88oBEjRsjj8VgdC9fAgkzwNYcxxlgdAgAAXN/MmTM1aNAgNW/eXP/5z39UpkwZqyNd09SpUzVx4sQs244fP67Q0FAFBQV5t9WsWVNff/11TsfLdgcPHtSAAQO0cOFCPfHEE3K73dzTHT7hb3UAAABwY2JjY9WoUSPFxMSoUaNG+u9//6uWLRkbXrgAACAASURBVFte8bnHjh1TYGCgpQUyMTHxinP3T5w44f29w+FQaGhoTsbKdsYYzZo1S8OHD1dYWJg+//xztW/f3upYyMOYQgMAgI00aNBAv/zyi5o2baq2bdtqzJgxysjIyPKchIQENWzYUA8++OBlj+Wk7t27X3fOt9PpVK9evXIm0C2YM2eO/vnPf1718SstyER5h69R4AEAsJkiRYpo/vz5evnllzVu3Dh17txZCQkJki6OBnfv3l3Hjh3TypUr9frrr1uWs0qVKmrYsKH8/K5eNzwejx599NEcTHXjvv/+e/Xp00ejRo3SsmXLsjzGgkywEnPgAQCwseXLl+vRRx+Vv7+/4uPj9eWXX+qFF17wjrwHBARo3bp1ioyMtCTf1KlTNWTIkCteeOvn56emTZtqxYoVFiS7tiNHjuiuu+7yvjGqUKGCtm3bpgIFCmj16tXq27evtm3bphdeeEFDhgzhnu7IURR4AABs7tChQ3r00Ud18OBB7d+/X5f+1+7v76+6devq559/ltPpzPFsx48fV7ly5a5Y4J1Op15//XX1798/x3NdS0pKipo3b66NGzd6F9Hy9/fXwIEDVaxYMY0fP1533nmnZs+erXr16lmcFvkRBR4AgDxg//79qlOnjs6dO3fZvHen06l//etf+vvf/25Jtvvuu0/ffvvtZSXe6XTq6NGjKlGihCW5rmbgwIGaNWuW0tPTs2x3OByKjIzUoEGD9MQTT3BPd1iGOfAAANhcamqqHnnkEV24cOGKF616PB49++yz2rlzpwXppB49euiP44X+/v6KiorKdeX9rbfe0vTp0y8r79LFKT8ej0e9e/emvMNSFHgAAGzu2Wef1bp167zTPa4kIyND3bt3t2QRqC5dusjfP+udqz0ej7p3757jWa5l7dq16tev31Uf93g82rlz52X3tgdyGlNoAACwsZ9//lnNmjW7bIT7Svz8/PT6669rwIABOZAsq+joaC1cuND7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+PzoWmSVVDzvoLdfW7zWYQg6eDWHi8YRBeZiFJlLrNN2yg1u1hWRTcLw2q6Ft23jfqJbdEeIR5MqPYcaHoUon6hFRERENcJ98Z2v1U4P7ocBb+J0dhre3PddlZ63f9gsBLn51+rP5PvIqbhamI1Xd86v8nO/eWQyYnj5SboPTqEhIiKiOm/ijnkYEBgOH0f3+68soa7eQXjI1Q9v7VsqdRSqx1jgiYiIqM67UpiNUb9+jo+6jbLOQ68Mlz/mzdspbX/lbD+tJ17vGIOhmz5EbhWvtENUFSzwREREJAvHMi/ig/hYjAsZcN91nTQOeD/iOfhqPQAAc3qOQ7cqXn++KjRKFZ59qDfGbv/Cel4Cka1wDjwREVEN4xx4elCcA0+VwRF4IiIiIiIZYYEnIiIiIpIRFngiIiIiIhlhgSciIiIikhEWeCIiIiIiGWGBJyIiIiKSERZ4IiIiIiIZYYEnIiIiIpIRFngiIiIiIhlhgSciIiIikhEWeCIiIiIiGWGBJyIiIiKSERZ4IiIiIiIZYYEnIiIiIpIRFngiIqIa5qv1kDpCnWU+ngGRUyR1jDpJqVDCj8cOVYJCCCGkDkFEREQNg0KhwMqVK/H0009LHYVItjgCT0REREQkIyzwREREREQywgJPRERERCQjLPBERERERDLCAk9EREREJCMs8EREREREMsICT0REREQkIyzwREREREQywgJPRERERCQjLPBERERERDLCAk9EREREJCMs8EREREREMsICT0REREQkIyzwREREREQywgJPRERERCQjLPBERERERDLCAk9EREREJCMs8EREREREMsICT0REREQkIyzwREREREQywgJPRERERCQjLPBERERERDLCAk9EREREJCMs8EREREREMsICT0REREQkIyzwREREREQywgJPRERERCQjLPBERERERDLCAk9EREREJCMs8EREREREMsICT0REREQkIyzwREREREQyohBCCKlDEBERUf0zd+5czJw5s8KyK1euwM3NDfb29tZlwcHB2LJlS23HI5IttdQBiIiIqH7Kzs5GamrqbcuvXbtm/btCoYCbm1ttxiKSPU6hISIiIpsYMWIEFArFPddRqVQYM2ZM7QQiqic4hYaIiIhsJiIiAgcPHkRZWdkdH1coFLhw4QICAwNrORmRfHEEnoiIiGxm1KhRdx2FVyqV6NGj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z1sxf+rH1n83adMSnfv3RNijPdAsNOie5xZUVStXX/T2k/5NExHVLyzwRER1jNe3I2C5yx1Lq6RMwHIpC+ZTV2FJyoAlJRtOk/pA6e9a/W1XU/H644ACsB8YWvv73nAc5uQr0IQFQB0WAKWn7abwqJRKXB+z3GbbJ6KGiQWeiKiOcV88XOoIVIOyXlwhdQQiqmd4EisRERERkYywwBMRERERyQgLPBERERGRjLDAExERERHJCAs8EREREZGMsMATEREREckICzwRERERkYywwBMRERERyQgLPBERERGRjLDAExERERHJCAs8EREREZGMsMATEREREckICzwRERERkYywwBMRERERyQgLPBERERGRjKilDkBERNWnUigxus0jiG7eHT6O7riUfw0lFjNS86/jcsENNHJwwdu/L5M65m0ecvPDE00744uE9TW+7V8GTsfchPX45WI8BjQJw9SwJxG5/l0AgFKhwPjQJzC6zSNo6twYyVmp+CJhPdac2wsBAbVShXc7P4Ovj29CWn5mjWcjIqoOFngiIplr6twYK/q/AYVCgfG//RsJ1y9AQECpUEDXsieM3Z/HhgsHpI55m15+oRjT5jFM/G2eTbbfwsUX53Iybv7d1QfncjOsj33UbTQ87Z2x6EQcWrn5YUybx7D4kUlw1jjgu5PbYC6zYPbRdZjbS49//L4M53Ov2CQjEdGDYIEnIpIxe5UGq6PehItGi86rX0N+aZH1sTIhsPLMTqQWZOLF4P4SprxdsHsTmPpMRO+f3kRJmbnGt69V28NH62Yt3i1c/r/AN3VujEYOrhi7/Qvr+psvHcKPUX/Hq+0H4buT2wAAmcV5MB5aje/7T8Vj69+p8NoSEUmJc+CJiGRs+EN9EOTmj08O/3DXgrnz8nH8dG5vLSe7O6VCAVPfiVh2ajsyi/Nsso8Wrj5Iy89EkaUEANDc1Qfncm6WeX8nT7y9b2mF9belJuB6US78tZ4VlidmXsC53Az8M2KETXISET0IjsATEcnY44GdAAB7M07ec71153+3/t3VToupHWNgEWWwU6kR4h6IE1mXMPPwj8guLsATTTsjKjAcUYHh6P3Tm5jdcxz6+rfFyew0vLLDhOM3LiEqMBymPn+Fu70TPj28Bh8ejAUAvBQciU97vIApuxfh2+Std8ncGR29WmDqnm8qLL9frgjvhzC0eTcM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lRVmzZqFN954AyYmJlJHIyJ6LizwREQEACgqKsK6deswe/ZsFBUVYfLkyXj33XdRp04dqaNVSE5ODj799FN8/fXXsLCwwOzZs1nciahaYYEnIqIy7t+/jzVr1uDTTz9FSUkJpk2bhsmTJ8Pc3FzqaE+Ul5eHhQsXYtmyZTA2NsaMGTMwZswY1K5dW+poRESVigWeiIgeKSsrC19++SWWLFkCGxsbTJw40WCn1WRnZ2PZsmXIzs7GlClTMHXqVNjY2Egdi4ioSrDAExHRE92+fRuff/45li9fjvv370sd55Fq166NSZMmYdq0abCzs5M6DhFRlWKBJyIivQsODgYAREVFSZyEiEh+uPAtEREREZGMsMATEREREckICzwRERERkYywwBMRERERyQgLPBERERGRjLDAExERERHJCAs8EREREZGMsMATEREREckICzwRERERkYywwBMRERERyQgLPBERERGRjLDAExERERHJCAs8EREREZGMsMATEREREckICzwRERERkYywwBMRERERyQgLPBERERGRjLDAExERERHJCAs8EREREZGMsMATEREREckICzwRERERkYywwBMRERERyQgLPBERERGRjLDAExERERHJCAs8EREREZGMsMATEREREckICzwRERERkYywwBMRERERyQgLPBERERGRjLDAExERERHJCAs8EREREZGMsMATEREREcmIQgghpA5BRETVV2JiIgIDA5Gfn6/blpubCwCwsrLSbTM3N8eWLVvQpk0bvWckIpITldQBiIioelOpVEhJSXnkY3l5eWW+NjY21kckIiJZ4xQaIiKqUm5ubvDw8ICR0eN/5CgUCrRv3x4tW7bUYzIiInligScioio3cuTIJxZ4pVKJkSNH6jEREZF8cQ48ERFVuYyMDDg5OUGr1T7ycSMjI6Snp8PBwUHPyYiI5IdX4ImIqMo1bNgQPj4+UCqVDz2mVCrRtWtXlncionJigSciIr140hSZESNG6DEJEZG8cQoNERHpxd27d2Fvbw+1Wl1mu7GxMW7cuAEbGxuJkhERyQuvwBMRkV7Y2NigT58+UKn+t4KxSqXCyy+/zPJORFQBLPBERKQ3ISEh0Gg0uq81Gg1CQkIkTEREJD+cQkNERHqTn5+PunXroqCgAABQq1Yt3L59G+bm5hInIyKSD16BJyIivTE3N8fAgQNh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NWvWNPHx8ebEiRNWxzqnY8eOmdjYWONwOEzfvn0r5PSvC9myZYvp0aOHcTgcJjY21hw7dszqSACASuSSC/z+/ftNXFycCQsLM8HBwSYuLs7s2rWrLLJVart27fKWurCwMBMXF2f2799vdaxiUlNTve+FatWqmfj4eIrMFTh27JiJj4831apV877mhw8ftjqWV0FBgUlISDARERGmYcOGlfb0mGdKTk42DRs2NBERESYhIaHCHpwMAChfLrrAr1u3zju/vUaNGiY+Pt4cPXq0LLPBGHP06FETHx9vatSo4Z0nv27dOksz/fjjj96DcGvUqGHmzJnDgX2lKCMjw8yZM8fUqFHDexD4jz/+aGmm1atXm7Zt25rAwEATHx9vTp48aWme8iQ7O9vEx8ebwMBA07Zt20p9oDYAwDfOW+ALCgpMUlKS97zd0dHRJjEx0eTl5fkqH36Rl5dnEhMTTXR0tPe84klJST4d8du1a5f36rlFBynbac623WRnZ5uEhARTv35971V9ff1t1+HDh71XKB04cKD57rvvfLp/O/nuu+/MwIEDvVecLU/fngAAKpZzFvi33nrLtG7d2kgy7du3N++8847tDqqsiNxut1m0aJFp3769kWRat25t3nrrrTLd58GDB82ECRNMQECAqV+/vpk3bx7F3Yeys7PN888/b+rXr28CAwPNxIkTzcGDB8t0n4WFheYvf/mLqV69uqlfv7555513KuTZZUpbYWGhWbRokalfv76pXr26efnll3neAAClrsQCv3XrViPJDBw40KxatcrXmXCRVq5caQYOHGgklelpGseNG2ciIyPNq6++yrcvFsrLyzMLFiwwtWvXNuPGjSvTfa1du9ZIMlOnTjVZWVlluq+KKCsry0yZMsVIMmvXrrU6DgCggnGoBG63W5L0wgsvqGfPniWtgnLg+uuv1wsvvCDpf69ZWSgoKFDnzp01YcIEBQYGltl+cH6BgYGaOHGiunTpooKCgjLdV9H76cEHH1SVKlXKdF8VUZUqVTRt2jRJZft3EwBQOZVY4CuL9PR0qyOgHLic90FGRkYZJMGFHD16VP/4xz/01FNPWR0FAADLVLoCn5eXp6eeekpdunRRjRo1rI4Di1zO+6CgoEDPPfecevbsyXvHAjt27NATTzyhW265RW+99dYl3z8lJUW9e/dWWFiY6tWrpwkTJuj48eNlkBQAgLJV6Qp8UFCQpkyZol27dqmwsNDqOLDI5bwPnE6nfv/732v79u3yeDxlnBC/Fh0drblz517Wfbds2aLZs2fr8ccf1+eff65evXrptdde0+233166IQEA8IFKV+AlKTg4WLVr17Y6Bix2Oe+DoKAg1apVq4wS4UKCgoIu634rVqzQokWL1L17d7Vt21ZvvvmmqlatqlWrVpVyQgAAyp7T6gAAUNamTJly1rKCggKNGTPGgjQAAFwZy0fgjTFat26dpk6dqqioKB04cEC//e1vVa1aNXXs2FGff/65PB6PVq5cqQceeEBRUVFKTU3V9ddfr4YNG+rEiRPKzs7W7Nmzdccdd6h9+/bq06ePtm3b5t3HqVOn9Oijj+ree+/VzJkzNW3aNJ08efKScq5YsUIBAQGqUqWKPv/8c6Wnp2vMmDHy8/NTr1699M0330iSNm/erLp162rBggWl+jxVdHZ5H5zp22+/Vf/+/VWtWjX16NFDGzduLI2nokK70tfw1xYsWCA/Pz/5+flJkjIzMzV37txiy36tsLBQjz32mObOnauXX365TB4nAABlqqRzS6akpBhJZvfu3WV+HsuCggKzZMkSExQUZCSZBx980Kxatcq8/fbbpkqVKsbpdJotW7aYL774wrvO008/bZYvX27uuusuk5mZaWJjY82OHTu82+zbt6+pXbu2ycjIMB6Px/Tu3duMGzfOe0GV3bt3G39/f3OOh39O99xzjwkMDDTp6enGGGNycnJM7dq1zW233eZdx+12mx49evjs4i27d+82kkxKSkqZ7WP06NFm6NChZbZ9Y+z1PmjevLmRZKZPn27+85//mFdeecWEhISYgIAAn1wpdejQoWb06NFluo9Vq1YZSaV+NdG8vLzLfg2LSDLNmzf3/t64ceOzXsOSlhljzOLFi02PHj2MJHP11VeX6YWWDh8+bCRxLQ0AQKmzvMAXadq0qZFk8vPzvcvmzZtnJJkJEyYUW+fnn3/2rrN69WojqcSfJUuWmDfeeKPECx0VbetSbN++3Ugyf/7zn73LBg8ebEJCQrwF45///Kd55ZVXLvnxX66KUuCL2OF9UFTgz7yoVUJCgpFk7rrrrst52JfEzgW+yOW8hkV+XeCLXo8zlbTMGGNOnDhhtm/fbl588UUTHBxsJJnXXnutDB4hBR4AUHYsn0JTxOE4HSUgIMC7bMiQIZLk/Qq9aJ3q1at719m0aZNiYmJkTn8YKfYzaNAgLV26VJLUpEmTEvd3KWJiYtSrVy+9+uqrMsZo79698ng8crvdeueddyRJb731FvNqr4Ad3gdFzryo1bBhwyRJX3/99WVvrzK5nNewNERERCgmJkb33Xefd5rb5ZySEgAAK5WbAl+SevXqSZLCwsLOuU52drb27t1b4lxmj8ejvXv3Siq9C+/cd9992rp1qzZt2qRnn31Wzz77rH73u9/pr3/9q7Zv366rr75aoaGhpbIvnFYe3we/FhkZKel/WXHpLvQalrahQ4dKEn9fAQC2U64L/M8//yxJuv7668+5TkxMjHJzc/XMM88UW/7tt9/qpZde8o64fvLJJ6WSaciQIbrqqqs0a9YsnTx5Ur/5zW90991368svv9S9996ryZMnl8p+8D/l8X3waz/++KMk6aabbiqT7VcGF3oNz6XoYNW8vDzvslOnTkk6fXD0uaSmpkqSBg8efNmZAQCwQrk7jaTH45G/v78k6dNPP1WLFi28p4DLz8+XdPr0b07n6eiDBw9W06ZN9eSTT+rQoUO68cYbtWPHDm3cuFHvv/++unbtqg8++EDTp09X/fr11b17d61bt877n/eePXt0zTXXXHQ+p9OpSZMm6bHHHvNOl7j++uvVvHlzhYWFqXHjxqX2XFRm5fl9UFQYT5w4oerVq8sYo3nz5qlv376aMGFCqT4PFdXlvIaSlJOTI6l4WY+JidHOnTv15JNP6vbbb9cnn3zi/ablk08+Ud++fZWQkKDq1atrxIgRCg8PV25urqZNm6Y777xTkyZN8uVDBwDgipW7EfjXXntNx48f1/Hjx3X48GGtX79ehYWFevLJJ7Vv3z5J0tSpU/XVV19JOj1X+r///a+GDh2qDz/8UFOnTtWxY8f09ttvKzw8XB06dNCKFSvUokULjRgxQi1atNCaNWvUpk0bTZo0Sfv27bvkr+fvvvtuPfDAA7r22mslnS50M2bM0MyZM0v1uajMyvP74MUXX9SQIUM0cuRIjR8/Xvfee68aN26sf/3rX1c0p74yOHny5GW/hj/88IMeeughSdL+/fs1b948paWlae7cuerVq5cSEhI0ZswYde/eXTExMRozZozS0tJUUFCgEydOKD4+Xtdcc43+8Ic/KD4+XjNnztTrr79+ztNNAgBQXvmZEr5j/vLLL9W+fXvt3r37kkanr0SLFi20a9eu837ljbPt2bNHTZo0UUpKiq677roy2ceYMWOUnZ2tjz76qEy2fybeBxc2bNgwValSRX//+9/LbB+ff/65rr/+eh0+fFh16tQps/1UZEeOHFHdunW1atUq9ezZ0+o4AIAKhOFCyXvRl/P97Ny50+qYKGO8DwAAgB2UmznwWVlZkk4ffHbmKQR9gdHe8oP3AQAAwPlZPgKfnZ2t6dOnew8mnDhxotauXWtxKvga7wMAAICLc94R+KIzPpSlKlWqeM+njkvni9dIOn22kLLE++DilfVrcabCwkKf7aui4bkDAJSVEkfga9WqpSpVqqhLly76/e9/rz179vg6Fy5g9+7duu+++9SlSxeFhYWd9yJHVyoqKkrLli1Tv379tHLlyjLbD87vs88+U9++fbVs2TLvhaPKSp06dRQSEqLevXtr+fLlZbqviug///mPevfurdDQ0GJXmwUAoDSUWOAbNmyo1NRUPfXUU1qyZImaNGmi7t27a8mSJcwTtpAxRkuWLFH37t3VtGlTffrpp3r++eeVmpqqZs2aldl+Z8+erTVr1igwMFA33nijWrdurYULF5bJ1TFRnMfj0cKFC9W6dWv17t1bERER+uqrrzR37twy3W+zZs20e/du9ezZUwMGDFCfPn307bffluk+K4Jvv/1Wffr00U033aSePXtq9+7d3tPNAgBQaswFeDwek5ycbDp37mwkmVatWpkFCxaY3NzcC90VpSQ3N9csWLDAtGrVykgy3bp1M8nJycbj8fg8y9atW01sbKzx9/c3jRs3NgkJCSYvL8/nOSq6vLw8k5CQYBo3bmycTqeJjY0127ZtsyTLxo0bTceOHY3L5TJxcXEmMzPTkhzlWUZGhomLizMul8t06tTJbNq0yepIAIAK7IIF/kyrV682I0eONP7+/iYyMtLEx8eb48ePl1W2Su/48eMmPj7eREZGektcSkqK1bGMMcbs3r3bTJw40TidTnP11VebhIQEk5OTY3Us2zt58qRJSEgwDRs2NIGBgSYuLs7s2bPH6ljG4/GYxMREU6tWLVOvXj2TmJhoCgsLrY5lucLCQpOYmGjq1atnatWqZRITEy35YA0AqFwuqcAX2b17t4mLizMhISEmNDTUTJw40ezYsaO0s1VaO3bsMBMnTjShoaGmatWqZsaM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c2/z8fHRihUr1KhRo2LPeCUpKSkaOHCgvvzyS82aNYspMwAAQJLE015wWe3bt9eePXs0ZMgQ3X///XriiSf05ptvym63X/T4jIwM+fr6FnPKC9lsNsXGxl50X3p6eoGfL3UtRS06Olr16tVTjRo1Lti3b98+9erVS6mpqdqwYYPuvfdeAxICAICbEVNocEUVKlRQdHS0e+WTNm3aKC4u7oLj9u3bp6CgIM2YMcOAlAXVq1dPjRs3lofHpb/iFotFTZo0Ud26dYsx2Tk//vijevbsqQ4dOujMmTMF9q1atUotW7aUv7+/du7cSXkHAAAFUOBxVSwWi0aPHq0tW7bozJkzatq0qZYuXeren52drd69eysrK0vjx4/X/v37DUx7TkRExGULvNVqVURERDEmOsfpdOrhhx+WJB0/flz/+Mc/5HA43PPde/furT59+uibb75RlSpVij0fAAC4uTEHHtcsPT1dI0eO1JIlSxQREaE5c+boySef1KJFi5Sfny+73a7q1atrz5498vLyMixnQkKCQkNDL7mKjoeHh+Lj41WpUqVizTVz5kyNGTPGnctqtWrYsGE6fvy41q1bx3x3AABwWRR4XLe5c+dq7NixCgoK0tGjRwvss9lsGjdunKZMmWJQunPatm2rLVu2yOFwFNhutVrVpk0bffXVV8Wa5/jx46pVq5aysrIu2BcYGKhFixapW7duxZoJAACYC1NocN1GjBihlStXKiEhQRaLpcC+/Px8vf766/r6668NSnfO5abIDBo0qBiTnPPEE08oPz//ovvOnj2roKCgYk4EAADMhhF4XLfc3Fy1bNlSe/fuVV5e3gX7rVarKlWqpH379qlMmTIGJJTOnDmj4ODgC/LZ7XadPHlSgYGBxZbl008/1QMPPHDJ/VarVYGBgfrhhx8UEhJSbLkAAIC5MAKP6/biiy/qxx9/vGh5lySHw6GTJ0/qqaeeKuZkfwgMDFSnTp1ks/2xYqrNZlPnzp2LtbxnZWVp1KhRl72p1uFwKCUlRf369bvkKD0AAAAFHtdly5Ytev311y+YW/5XeXl5WrBggdatW1dMyS40cODAAjkdDocGDhxYrBleffVVHT9+/JI31J5nsVi0adMmbd26tZiSAQAAs2EKDa7L+vXrNXToUMXHx8tms112xNjDw0Ply5fX/v37VbZs2WJMeU5mZqbKly/v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\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# At this stage you may ignore what convolution or pooling means\n",
    "train_model = model_helper.ModelHelper(name=\"mnist_train\", arg_scope=arg_scope)\n",
    "conv1 = brew.conv(train_model, 'data', 'conv1', dim_in=1, dim_out=20, kernel=5)\n",
    "pool1 = brew.max_pool(train_model, conv1, 'pool1', kernel=2, stride=2)\n",
    "conv2 = brew.conv(train_model, pool1, 'conv2', dim_in=20, dim_out=50, kernel=5)\n",
    "pool2 = brew.max_pool(train_model, conv2, 'pool2', kernel=2, stride=2)\n",
    "fc3 = brew.fc(train_model, pool2, 'fc3', dim_in=50 * 4 * 4, dim_out=500)\n",
    "fc3 = brew.relu(train_model, fc3, 'relu3')\n",
    "pred = brew.fc(train_model, fc3, 'pred', dim_in=500, dim_out=10)\n",
    "softmax = brew.softmax(train_model, pred, 'softmax')\n",
    "\n",
    "graph = net_drawer.GetPydotGraph(train_model, rankdir=\"TD\")\n",
    "Image(graph.create_png())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 5. CNN Model Helpers\n",
    "\n",
    "Those who are aware of Keras Library would easily understand why caffe2 opted to create CNN Model Helpers module. It's major functionality was to ease the process of network creation and management.\n",
    "\n",
    "It is a combination of General Model Helpers and Brew.\n",
    "\n",
    "For more intricate details refer to: https://github.com/caffe2/caffe2/blob/master/caffe2/python/cnn.py\n",
    "\n",
    "Note: CNN Model Helpers at later stages wil be removed and in place Brew will be used."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5.1. Import Details\n",
    "\n",
    "The two major imports that brew makes are\n",
    "\n",
    "1) The entire caffe2.python.model_helpers module\n",
    "\n",
    "2) caffe2.python Helpers -> This folder, https://github.com/caffe2/caffe2/tree/master/caffe2/python/helpers, contains\n",
    "\n",
    "3) The entire caffe2.python.brew\n",
    "\n",
    "CNN Model Helper can be imported from **caffe2.python** module"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5.2 Supported Operators\n",
    "\n",
    "At present (As per 27th March 2018), Brew supports the following functions\n",
    "\n",
    "1) Base Layers:\n",
    "\n",
    "        1.1 fc\n",
    "        1.2 packed_fc\n",
    "        1.3 fc_decomp\n",
    "        1.4 fc_sparse\n",
    "        1.5 fc_prune\n",
    "        1.6 dropout\n",
    "        1.7 max_pool\n",
    "        1.8 average_pool\n",
    "        1.9 max_pool_with_index\n",
    "        1.10 lrn\n",
    "        1.11 instance_norm\n",
    "        1.12 spatial_bn\n",
    "        1.13 concat\n",
    "        1.14 depth_concat\n",
    "        1.15 transpose\n",
    "        1.16 conv\n",
    "        1.17 conv_nd\n",
    "        1.18 conv_transpose\n",
    "        1.19 group_conv\n",
    "        1.20 group_conv_deprecated\n",
    "        1.21 elementwise_linear\n",
    "        1.22 layer_norm\n",
    "        1.23 batch_mat_mul\n",
    "        \n",
    "    \n",
    "\n",
    "2) Optimizers\n",
    "    \n",
    "        2.1 Adam\n",
    "        2.2 Adagrad\n",
    "        \n",
    " \n",
    "\n",
    "3) Fillers\n",
    "    \n",
    "        3.1 ConstantFill\n",
    "        \n",
    "\n",
    "4) Activation Functions\n",
    "\n",
    "        4.1 softmax\n",
    "        4.2 relu\n",
    "        4.3 prelu\n",
    "        4.4 tanh\n",
    "        \n",
    "\n",
    "5) General Functions\n",
    "\n",
    "        5.1 arg_scope\n",
    "        5.2 sum\n",
    "        5.3 image_input\n",
    "        5.4 video_input\n",
    "        5.5 cond\n",
    "        5.6 loop\n",
    "        5.7 db_input\n",
    "        5.8 Accuracy\n",
    "        5.9 CopyCPUToGPU\n",
    "        \n",
    "\n",
    "6) Loss and Reduce functions\n",
    "\n",
    "        6.1 AveragedLoss\n",
    "        \n",
    "\n",
    "\n",
    "7) Training/Testing helper functions\n",
    "\n",
    "        7.1 iter\n",
    "        7.2 accuracy\n",
    "        7.3 add_weight_decay\n",
    "        7.4 AddGradientOperators\n",
    "        7.5 AddParameter\n",
    "        7.6 AddWeightDecay\n",
    "        7.7 Checkpoint\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "**Note: All the above will be studies in detail during the later sections of this course**\n",
    "       "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5.3 Creating Network using CNN Model Helpers and observing the difference\n",
    "\n",
    "Earlier we created a CNN network using model_helpers, and brew lets repeat the same using CNN Model Helpers.\n",
    "\n",
    "As you will see, the difference would be, initialization will be done here for each layer unlike simple model_helpers."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING:root:[====DEPRECATE WARNING====]: you are creating an object from CNNModelHelper class which will be deprecated soon. Please use ModelHelper object with brew module. For more information, please refer to caffe2.ai and python/brew.py, python/brew_test.py for more information.\n"
     ]
    },
    {
     "data": {
      "image/png": "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/fffryFDhighIUHGGH3yySeKjY1V+fLldfz4cUVHR6tIkSK6++67tXHjRknSwoULVaxYMTkcDo0aNcp77unTp8vpdGrmzJnZ9vUsXbpUgYGBKlSokL777judPn1aPXr0kMPhUNu2bbVp0yZJ0tq1a1W2bFnFxcVl27mR915Pl9qyZYvat2+vokWLqlWrVlq5cqVPznNLcvYW9QCA3KBy5cpmwoQJ2X5cj8dj7rvvPvP44497F4fatWuXcTqd5tL/cqpVq2aqVKlijDEmNTXVhIaGmlq1ankf1+8L0VzqevtkpwkTJpjKlSv75NiZRowYYRo0aODTc/xRWlqaiYqKMj169DAej8cYY8zMmTONJPPxxx+bM2fOmGrVqpnRo0d79zl27JipVq2aiYiIMKdOnTIHDhwwhQoVMpLMiy++aPbt22cWLlxoJJnmzZt795s6daqRZBYsWODdtm/fPvPXv/71itmu9DO/UQMGDDBBQUHm9OnTxhhjzp8/b0qVKmW6deuW5Wtv1aqVJYuWjRs3zlStWtWn5/j444+NJJOcnOzT81wqr76eMhdSGj58uPnqq6/MjBkzTMGCBU1gYKDZvn37LR3zViQnJ3u/l39EgQeAfMhXBf6tt94yksz69euzbM9cbTTTjBkzzMyZM40xF0t/lSpVjL+/v/fxK/3ne719slNeLfCTJk0yksy2bdu821JTU82bb75pTp06ZZ577jkjyRw+fDjLfnPmzDGSzLBhw4wxxlSvXj3LzzMjI8OULl3aBAYGerelpKSY8PBw89BDD3m3jRw50qxdu/aK2W6ncG3evNlIMtOmTfNu69ixoylYsKBJTEw0xhjzySefmBkzZtzS8W9XXi3wefX1lFngL/1eTp482Ugyffr0uaVj3oprFXim0AAAss1nn30mSbrjjjuybPfzy/rfTb9+/dS1a1dNmTJFY8eOVUpKitLT06957FvZB1ktXbpUklShQgXvtoCAAPXu3VthYWFasWKFJKlw4cJZ9mvdurUk6YcffpCkyxYJcjgcKlq0qFJTU73bAgMDNXjwYC1atEi7du1Samqqtm/frvr162f71xUZGam2bdtq5syZMsZo79698ng8SktL03vvvSdJeuedd9SjR49sP3d+lldfT5mCgoK8v+/cubMkacOGDT47382gwAMAss3evXslXX8RlOXLl6t27dqq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9u1q06aNBg4cqP79+2vLli3e1VRhPxR4AABuQIcOHfTLL78oNDRUTZs21bx586yOBFxXWlqaxowZo/r16yspKUmrVq2S2+1WwYIFrY6G20CBBwDgBlWsWFHffPONevfurUcffVT9+vVTamqq1bGAK2JBpryLAg8AwE0ICgrSlClT9OGHH2revHlq3ry59u7da3UswIsFmfI+CjwAALcgOjpaK1euVGpqqho3bqxFixZZHQnwLsj09ttvsyBTHkaBBwDgFlWvXl0rV65UdHS0OnTooMGDBystLc3qWMiH/rgg09atW1mQKQ+jwAMAcBuCg4M1a9Ysvf3225o9e7batWunw4cPWx0L+QgLMuU/FHgAALLBY489phUrVujw4cOqV6+eFi9ebHUk5HEsyJR/UeABAMgm9erV09q1a3XvvffqgQce0JgxY5SRkWF1LOQxly7ItGnTJhZkyoco8AAAZKPChQvrv//9r9544w2NHz9eUVFROnbsmNWxkEf8cUGmzZs3syBTPkSBBwDAB2JjY7VixQrt3btXjRo10g8//GB1JNgYCzLhUhR4AAB8pFGjRlq1apXq1KmjNm3aaMKECTLGWB0LNsOCTPgjCjwAAD5UvHhxffbZZ3r55Zc1atQoRUdH6/Tp01bHgg2wIBOuhgIPAICPORwODR48WIsXL9bKlSvVuHFjrVu3zupYyMVYkAnXQoEHACCHtGnTRuvXr1dERISaNWumKVOmWB0JuQwLMuFGUOABAMhBJUuW1Oeffy6Xy6UhQ4aoZ8+eSkpKsjoWcgEWZMKNosADAJDDnE6nxowZo08//VSff/65GjVqpE2bNlkdCxZhQSbcLAo8AAAWeeihh/TLL78oLCxMzZo103vvvWd1JOQgFmTCraLAAwBgofDwcH333Xd68skn1b17dz322GO6cOGC1bHgYyzIhNtBgQcAwGL+/v5yu9368MMPtWDBArVs2VK7d++2OhZ8gAWZkB0o8AAA5BKdO3fWypUr5fF41KBBA73//vtWR0I2YkEmZBcKPAAAuUi1atX0008/qVevXuratasGDx6stLQ0q2PhNly6IFOxYsVYkAm3jQIPAEAuExwcrClTpmjOnDn697//rXvvvVeHDh2yOhZuwR8XZFqyZAkLMuG2UeABAMilevbsqdWrVyshIUH16tXTl19+aXUk3CAWZIIvUeABAMjFatasqZ9++knt2rXTAw88oBEjRsjj8VgdC9fAgkzwNYcxxlgdAgAAXN/MmTM1aNAgNW/eXP/5z39UpkwZqyNd09SpUzVx4sQs244fP67Q0FAFBQV5t9WsWVNff/11TsfLdgcPHtSAAQO0cOFCPfHEE3K73dzTHT7hb3UAAABwY2JjY9WoUSPFxMSoUaNG+u9//6uWLRkbXrgAACAASURBVFte8bnHjh1TYGCgpQUyMTHxinP3T5w44f29w+FQaGhoTsbKdsYYzZo1S8OHD1dYWJg+//xztW/f3upYyMOYQgMAgI00aNBAv/zyi5o2baq2bdtqzJgxysjIyPKchIQENWzYUA8++OBlj+Wk7t27X3fOt9PpVK9evXIm0C2YM2eO/vnPf1718SstyER5h69R4AEAsJkiRYpo/vz5evnllzVu3Dh17txZCQkJki6OBnfv3l3Hjh3TypUr9frrr1uWs0qVKmrYsKH8/K5eNzwejx599NEcTHXjvv/+e/Xp00ejRo3SsmXLsjzGgkywEnPgAQCwseXLl+vRRx+Vv7+/4uPj9eWXX+qFF17wjrwHBARo3bp1ioyMtCTf1KlTNWTIkCteeOvn56emTZtqxYoVFiS7tiNHjuiuu+7yvjGqUKGCtm3bpgIFCmj16tXq27evtm3bphdeeEFDhgzhnu7IURR4AABs7tChQ3r00Ud18OBB7d+/X5f+1+7v76+6devq559/ltPpzPFsx48fV7ly5a5Y4J1Op15//XX1798/x3NdS0pKipo3b66NGzd6F9Hy9/fXwIEDVaxYMY0fP1533nmnZs+erXr16lmcFvkRBR4AgDxg//79qlOnjs6dO3fZvHen06l//etf+vvf/25Jtvvuu0/ffvvtZSXe6XTq6NGjKlGihCW5rmbgwIGaNWuW0tPTs2x3OByKjIzUoEGD9MQTT3BPd1iGOfAAANhcamqqHnnkEV24cOGKF616PB49++yz2rlzpwXppB49euiP44X+/v6KiorKdeX9rbfe0vTp0y8r79LFKT8ej0e9e/emvMNSFHgAAGzu2Wef1bp167zTPa4kIyND3bt3t2QRqC5dusjfP+udqz0ej7p3757jWa5l7dq16tev31Uf93g82rlz52X3tgdyGlNoAACwsZ9//lnNmjW7bIT7Svz8/PT6669rwIABOZAsq+joaC1cuND7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+PzoWmSVVDzvoLdfW7zWYQg6eDWHi8YRBeZiFJlLrNN2yg1u1hWRTcLw2q6Ft23jfqJbdEeIR5MqPYcaHoUon6hFRERENcJ98Z2v1U4P7ocBb+J0dhre3PddlZ63f9gsBLn51+rP5PvIqbhamI1Xd86v8nO/eWQyYnj5SboPTqEhIiKiOm/ijnkYEBgOH0f3+68soa7eQXjI1Q9v7VsqdRSqx1jgiYiIqM67UpiNUb9+jo+6jbLOQ68Mlz/mzdspbX/lbD+tJ17vGIOhmz5EbhWvtENUFSzwREREJAvHMi/ig/hYjAsZcN91nTQOeD/iOfhqPQAAc3qOQ7cqXn++KjRKFZ59qDfGbv/Cel4Cka1wDjwREVEN4xx4elCcA0+VwRF4IiIiIiIZYYEnIiIiIpIRFngiIiIiIhlhgSciIiIikhEWeCIiIiIiGWGBJyIiIiKSERZ4IiIiIiIZYYEnIiIiIpIRFngiIiIiIhlhgSciIiIikhEWeCIiIiIiGWGBJyIiIiKSERZ4IiIiIiIZYYEnIiIiIpIRFngiIqIa5qv1kDpCnWU+ngGRUyR1jDpJqVDCj8cOVYJCCCGkDkFEREQNg0KhwMqVK/H0009LHYVItjgCT0REREQkIyzwREREREQywgJPRERERCQjLPBERERERDLCAk9EREREJCMs8EREREREMsICT0REREQkIyzwREREREQywgJPRERERCQjLPBERERERDLCAk9EREREJCMs8EREREREMsICT0REREQkIyzwREREREQywgJPRERERCQjLPBERERERDLCAk9EREREJCMs8EREREREMsICT0REREQkIyzwREREREQywgJPRERERCQjLPBERERERDLCAk9EREREJCMs8EREREREMsICT0REREQkIyzwREREREQywgJPRERERCQjLPBERERERDLCAk9EREREJCMs8EREREREMsICT0REREQkIyzwREREREQyohBCCKlDEBERUf0zd+5czJw5s8KyK1euwM3NDfb29tZlwcHB2LJlS23HI5IttdQBiIiIqH7Kzs5GamrqbcuvXbtm/btCoYCbm1ttxiKSPU6hISIiIpsYMWIEFArFPddRqVQYM2ZM7QQiqic4hYaIiIhsJiIiAgcPHkRZWdkdH1coFLhw4QICAwNrORmRfHEEnoiIiGxm1KhRdx2FVyqV6NGj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z1sxf+rH1n83adMSnfv3RNijPdAsNOie5xZUVStXX/T2k/5NExHVLyzwRER1jNe3I2C5yx1Lq6RMwHIpC+ZTV2FJyoAlJRtOk/pA6e9a/W1XU/H644ACsB8YWvv73nAc5uQr0IQFQB0WAKWn7abwqJRKXB+z3GbbJ6KGiQWeiKiOcV88XOoIVIOyXlwhdQQiqmd4EisRERERkYywwBMRERERyQgLPBERERGRjLDAExERERHJCAs8EREREZGMsMATEREREckICzwRERERkYywwBMRERERyQgLPBERERGRjLDAExERERHJCAs8EREREZGMsMATEREREckICzwRERERkYywwBMRERERyQgLPBERERGRjKilDkBERNWnUigxus0jiG7eHT6O7riUfw0lFjNS86/jcsENNHJwwdu/L5M65m0ecvPDE00744uE9TW+7V8GTsfchPX45WI8BjQJw9SwJxG5/l0AgFKhwPjQJzC6zSNo6twYyVmp+CJhPdac2wsBAbVShXc7P4Ovj29CWn5mjWcjIqoOFngiIplr6twYK/q/AYVCgfG//RsJ1y9AQECpUEDXsieM3Z/HhgsHpI55m15+oRjT5jFM/G2eTbbfwsUX53Iybv7d1QfncjOsj33UbTQ87Z2x6EQcWrn5YUybx7D4kUlw1jjgu5PbYC6zYPbRdZjbS49//L4M53Ov2CQjEdGDYIEnIpIxe5UGq6PehItGi86rX0N+aZH1sTIhsPLMTqQWZOLF4P4SprxdsHsTmPpMRO+f3kRJmbnGt69V28NH62Yt3i1c/r/AN3VujEYOrhi7/Qvr+psvHcKPUX/Hq+0H4buT2wAAmcV5MB5aje/7T8Vj69+p8NoSEUmJc+CJiGRs+EN9EOTmj08O/3DXgrnz8nH8dG5vLSe7O6VCAVPfiVh2ajsyi/Nsso8Wrj5Iy89EkaUEANDc1Qfncm6WeX8nT7y9b2mF9belJuB6US78tZ4VlidmXsC53Az8M2KETXISET0IjsATEcnY44GdAAB7M07ec71153+3/t3VToupHWNgEWWwU6kR4h6IE1mXMPPwj8guLsATTTsjKjAcUYHh6P3Tm5jdcxz6+rfFyew0vLLDhOM3LiEqMBymPn+Fu70TPj28Bh8ejAUAvBQciU97vIApuxfh2+Std8ncGR29WmDqnm8qLL9frgjvhzC0eTcM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lRVmzZqFN954AyYmJlJHIyJ6LizwREQEACgqKsK6deswe/ZsFBUVYfLkyXj33XdRp04dqaNVSE5ODj799FN8/fXXsLCwwOzZs1nciahaYYEnIqIy7t+/jzVr1uDTTz9FSUkJpk2bhsmTJ8Pc3FzqaE+Ul5eHhQsXYtmyZTA2NsaMGTMwZswY1K5dW+poRESVigWeiIgeKSsrC19++SWWLFkCGxsbTJw40WCn1WRnZ2PZsmXIzs7GlClTMHXqVNjY2Egdi4ioSrDAExHRE92+fRuff/45li9fjvv370sd55Fq166NSZMmYdq0abCzs5M6DhFRlWKBJyIivQsODgYAREVFSZyEiEh+uPAtEREREZGMsMATEREREckICzwRERERkYywwBMRERERyQgLPBERERGRjLDAExERERHJCAs8EREREZGMsMATEREREckICzwRERERkYywwBMRERERyQgLPBERERGRjLDAExERERHJCAs8EREREZGMsMATEREREckICzwRERERkYywwBMRERERyQgLPBERERGRjLDAExERERHJCAs8EREREZGMsMATEREREckICzwRERERkYywwBMRERERyQgLPBERERGRjLDAExERERHJCAs8EREREZGMsMATEREREckICzwRERERkYywwBMRERERyQgLPBERERGRjLDAExERERHJCAs8EREREZGMsMATEREREcmIQgghpA5BRETVV2JiIgIDA5Gfn6/blpubCwCwsrLSbTM3N8eWLVvQpk0bvWckIpITldQBiIioelOpVEhJSXnkY3l5eWW+NjY21kckIiJZ4xQaIiKqUm5ubvDw8ICR0eN/5CgUCrRv3x4tW7bUYzIiInligScioio3cuTIJxZ4pVKJkSNH6jEREZF8cQ48ERFVuYyMDDg5OUGr1T7ycSMjI6Snp8PBwUHPyYiI5IdX4ImIqMo1bNgQPj4+UCqVDz2mVCrRtWtXlncionJigSciIr140hSZESNG6DEJEZG8cQoNERHpxd27d2Fvbw+1Wl1mu7GxMW7cuAEbGxuJkhERyQuvwBMRkV7Y2NigT58+UKn+t4KxSqXCyy+/zPJORFQBLPBERKQ3ISEh0Gg0uq81Gg1CQkIkTEREJD+cQkNERHqTn5+PunXroqCgAABQq1Yt3L59G+bm5hInIyKSD16BJyIivTE3N8fAgQNh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NWvWNPHx8ebEiRNWxzqnY8eOmdjYWONwOEzfvn0r5PSvC9myZYvp0aOHcTgcJjY21hw7dszqSACASuSSC/z+/ftNXFycCQsLM8HBwSYuLs7s2rWrLLJVart27fKWurCwMBMXF2f2799vdaxiUlNTve+FatWqmfj4eIrMFTh27JiJj4831apV877mhw8ftjqWV0FBgUlISDARERGmYcOGlfb0mGdKTk42DRs2NBERESYhIaHCHpwMAChfLrrAr1u3zju/vUaNGiY+Pt4cPXq0LLPBGHP06FETHx9vatSo4Z0nv27dOksz/fjjj96DcGvUqGHmzJnDgX2lKCMjw8yZM8fUqFHDexD4jz/+aGmm1atXm7Zt25rAwEATHx9vTp48aWme8iQ7O9vEx8ebwMBA07Zt20p9oDYAwDfOW+ALCgpMUlKS97zd0dHRJjEx0eTl5fkqH36Rl5dnEhMTTXR0tPe84klJST4d8du1a5f36rlFBynbac623WRnZ5uEhARTv35971V9ff1t1+HDh71XKB04cKD57rvvfLp/O/nuu+/MwIEDvVecLU/fngAAKpZzFvi33nrLtG7d2kgy7du3N++8847tDqqsiNxut1m0aJFp3769kWRat25t3nrrrTLd58GDB82ECRNMQECAqV+/vpk3bx7F3Yeys7PN888/b+rXr28CAwPNxIkTzcGDB8t0n4WFheYvf/mLqV69uqlfv7555513KuTZZUpbYWGhWbRokalfv76pXr26efnll3neAAClrsQCv3XrViPJDBw40KxatcrXmXCRVq5caQYOHGgklelpGseNG2ciIyPNq6++yrcvFsrLyzMLFiwwtWvXNuPGjSvTfa1du9ZIMlOnTjVZWVlluq+KKCsry0yZMsVIMmvXrrU6DgCggnGoBG63W5L0wgsvqGfPniWtgnLg+uuv1wsvvCDpf69ZWSgoKFDnzp01YcIEBQYGltl+cH6BgYGaOHGiunTpooKCgjLdV9H76cEHH1SVKlXKdF8VUZUqVTRt2jRJZft3EwBQOZVY4CuL9PR0qyOgHLic90FGRkYZJMGFHD16VP/4xz/01FNPWR0FAADLVLoCn5eXp6eeekpdunRRjRo1rI4Di1zO+6CgoEDPPfecevbsyXvHAjt27NATTzyhW265RW+99dYl3z8lJUW9e/dWWFiY6tWrpwkTJuj48eNlkBQAgLJV6Qp8UFCQpkyZol27dqmwsNDqOLDI5bwPnE6nfv/732v79u3yeDxlnBC/Fh0drblz517Wfbds2aLZs2fr8ccf1+eff65evXrptdde0+233166IQEA8IFKV+AlKTg4WLVr17Y6Bix2Oe+DoKAg1apVq4wS4UKCgoIu634rVqzQokWL1L17d7Vt21ZvvvmmqlatqlWrVpVyQgAAyp7T6gAAUNamTJly1rKCggKNGTPGgjQAAFwZy0fgjTFat26dpk6dqqioKB04cEC//e1vVa1aNXXs2FGff/65PB6PVq5cqQceeEBRUVFKTU3V9ddfr4YNG+rEiRPKzs7W7Nmzdccdd6h9+/bq06ePtm3b5t3HqVOn9Oijj+ree+/VzJkzNW3aNJ08efKScq5YsUIBAQGqUqWKPv/8c6Wnp2vMmDHy8/NTr1699M0330iSNm/erLp162rBggWl+jxVdHZ5H5zp22+/Vf/+/VWtWjX16NFDGzduLI2nokK70tfw1xYsWCA/Pz/5+flJkjIzMzV37txiy36tsLBQjz32mObOnauXX365TB4nAABlqqRzS6akpBhJZvfu3WV+HsuCggKzZMkSExQUZCSZBx980Kxatcq8/fbbpkqVKsbpdJotW7aYL774wrvO008/bZYvX27uuusuk5mZaWJjY82OHTu82+zbt6+pXbu2ycjIMB6Px/Tu3duMGzfOe0GV3bt3G39/f3OOh39O99xzjwkMDDTp6enGGGNycnJM7dq1zW233eZdx+12mx49evjs4i27d+82kkxKSkqZ7WP06NFm6NChZbZ9Y+z1PmjevLmRZKZPn27+85//mFdeecWEhISYgIAAn1wpdejQoWb06NFluo9Vq1YZSaV+NdG8vLzLfg2LSDLNmzf3/t64ceOzXsOSlhljzOLFi02PHj2MJHP11VeX6YWWDh8+bCRxLQ0AQKmzvMAXadq0qZFk8vPzvcvmzZtnJJkJEyYUW+fnn3/2rrN69WojqcSfJUuWmDfeeKPECx0VbetSbN++3Ugyf/7zn73LBg8ebEJCQrwF45///Kd55ZVXLvnxX66KUuCL2OF9UFTgz7yoVUJCgpFk7rrrrst52JfEzgW+yOW8hkV+XeCLXo8zlbTMGGNOnDhhtm/fbl588UUTHBxsJJnXXnutDB4hBR4AUHYsn0JTxOE4HSUgIMC7bMiQIZLk/Qq9aJ3q1at719m0aZNiYmJkTn8YKfYzaNAgLV26VJLUpEmTEvd3KWJiYtSrVy+9+uqrMsZo79698ng8crvdeueddyRJb731FvNqr4Ad3gdFzryo1bBhwyRJX3/99WVvrzK5nNewNERERCgmJkb33Xefd5rb5ZySEgAAK5WbAl+SevXqSZLCwsLOuU52drb27t1b4lxmj8ejvXv3Siq9C+/cd9992rp1qzZt2qRnn31Wzz77rH73u9/pr3/9q7Zv366rr75aoaGhpbIvnFYe3we/FhkZKel/WXHpLvQalrahQ4dKEn9fAQC2U64L/M8//yxJuv7668+5TkxMjHJzc/XMM88UW/7tt9/qpZde8o64fvLJJ6WSaciQIbrqqqs0a9YsnTx5Ur/5zW90991368svv9S9996ryZMnl8p+8D/l8X3waz/++KMk6aabbiqT7VcGF3oNz6XoYNW8vDzvslOnTkk6fXD0uaSmpkqSBg8efNmZAQCwQrk7jaTH45G/v78k6dNPP1WLFi28p4DLz8+XdPr0b07n6eiDBw9W06ZN9eSTT+rQoUO68cYbtWPHDm3cuFHvv/++unbtqg8++EDTp09X/fr11b17d61bt877n/eePXt0zTXXXHQ+p9OpSZMm6bHHHvNOl7j++uvVvHlzhYWFqXHjxqX2XFRm5fl9UFQYT5w4oerVq8sYo3nz5qlv376aMGFCqT4PFdXlvIaSlJOTI6l4WY+JidHOnTv15JNP6vbbb9cnn3zi/ablk08+Ud++fZWQkKDq1atrxIgRCg8PV25urqZNm6Y777xTkyZN8uVDBwDgipW7EfjXXntNx48f1/Hjx3X48GGtX79ehYWFevLJJ7Vv3z5J0tSpU/XVV19JOj1X+r///a+GDh2qDz/8UFOnTtWxY8f09ttvKzw8XB06dNCKFSvUokULjRgxQi1atNCaNWvUpk0bTZo0Sfv27bvkr+fvvvtuPfDAA7r22mslnS50M2bM0MyZM0v1uajMyvP74MUXX9SQIUM0cuRIjR8/Xvfee68aN26sf/3rX1c0p74yOHny5GW/hj/88IMeeughSdL+/fs1b948paWlae7cuerVq5cSEhI0ZswYde/eXTExMRozZozS0tJUUFCgEydOKD4+Xtdcc43+8Ic/KD4+XjNnztTrr79+ztNNAgBQXvmZEr5j/vLLL9W+fXvt3r37kkanr0SLFi20a9eu837ljbPt2bNHTZo0UUpKiq677roy2ceYMWOUnZ2tjz76qEy2fybeBxc2bNgwValSRX//+9/LbB+ff/65rr/+eh0+fFh16tQps/1UZEeOHFHdunW1atUq9ezZ0+o4AIAKhOFCyXvRl/P97Ny50+qYKGO8DwAAgB2UmznwWVlZkk4ffHbmKQR9gdHe8oP3AQAAwPlZPgKfnZ2t6dOnew8mnDhxotauXWtxKvga7wMAAICLc94R+KIzPpSlKlWqeM+njkvni9dIOn22kLLE++DilfVrcabCwkKf7aui4bkDAJSVEkfga9WqpSpVqqhLly76/e9/rz179vg6Fy5g9+7duu+++9SlSxeFhYWd9yJHVyoqKkrLli1Tv379tHLlyjLbD87vs88+U9++fbVs2TLvhaPKSp06dRQSEqLevXtr+fLlZbqviug///mPevfurdDQ0GJXmwUAoDSUWOAbNmyo1NRUPfXUU1qyZImaNGmi7t27a8mSJcwTtpAxRkuWLFH37t3VtGlTffrpp3r++eeVmpqqZs2aldl+Z8+erTVr1igwMFA33nijWrdurYULF5bJ1TFRnMfj0cKFC9W6dWv17t1bERER+uqrrzR37twy3W+zZs20e/du9ezZUwMGDFCfPn307bffluk+K4Jvv/1Wffr00U033aSePXtq9+7d3tPNAgBQaswFeDwek5ycbDp37mwkmVatWpkFCxaY3NzcC90VpSQ3N9csWLDAtGrVykgy3bp1M8nJycbj8fg8y9atW01sbKzx9/c3jRs3NgkJCSYvL8/nOSq6vLw8k5CQYBo3bmycTqeJjY0127ZtsyTLxo0bTceOHY3L5TJxcXEmMzPTkhzlWUZGhomLizMul8t06tTJbNq0yepIAIAK7IIF/kyrV682I0eONP7+/iYyMtLEx8eb48ePl1W2Su/48eMmPj7eREZGektcSkqK1bGMMcbs3r3bTJw40TidTnP11VebhIQEk5OTY3Us2zt58qRJSEgwDRs2NIGBgSYuLs7s2bPH6ljG4/GYxMREU6tWLVOvXj2TmJhoCgsLrY5lucLCQpOYmGjq1atnatWqZRITEy35YA0AqFwuqcAX2b17t4mLizMhISEmNDTUTJw40ezYsaO0s1VaO3bsMBMnTjShoaGmatWqZsaM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c2/z8fHRihUr1KhRo2LPeCUpKSkaOHCgvvzyS82aNYspMwAAQJLE015wWe3bt9eePXs0ZMgQ3X///XriiSf05ptvym63X/T4jIwM+fr6FnPKC9lsNsXGxl50X3p6eoGfL3UtRS06Olr16tVTjRo1Lti3b98+9erVS6mpqdqwYYPuvfdeAxICAICbEVNocEUVKlRQdHS0e+WTNm3aKC4u7oLj9u3bp6CgIM2YMcOAlAXVq1dPjRs3lofHpb/iFotFTZo0Ud26dYsx2Tk//vijevbsqQ4dOujMmTMF9q1atUotW7aUv7+/du7cSXkHAAAFUOBxVSwWi0aPHq0tW7bozJkzatq0qZYuXeren52drd69eysrK0vjx4/X/v37DUx7TkRExGULvNVqVURERDEmOsfpdOrhhx+WJB0/flz/+Mc/5HA43PPde/furT59+uibb75RlSpVij0fAAC4uTEHHtcsPT1dI0eO1JIlSxQREaE5c+boySef1KJFi5Sfny+73a7q1atrz5498vLyMixnQkKCQkNDL7mKjoeHh+Lj41WpUqVizTVz5kyNGTPGnctqtWrYsGE6fvy41q1bx3x3AABwWRR4XLe5c+dq7NixCgoK0tGjRwvss9lsGjdunKZMmWJQunPatm2rLVu2yOFwFNhutVrVpk0bffXVV8Wa5/jx46pVq5aysrIu2BcYGKhFixapW7duxZoJAACYC1NocN1GjBihlStXKiEhQRaLpcC+/Px8vf766/r6668NSnfO5abIDBo0qBiTnPPEE08oPz//ovvOnj2roKCgYk4EAADMhhF4XLfc3Fy1bNlSe/fuVV5e3gX7rVarKlWqpH379qlMmTIGJJTOnDmj4ODgC/LZ7XadPHlSgYGBxZbl008/1QMPPHDJ/VarVYGBgfrhhx8UEhJSbLkAAIC5MAKP6/biiy/qxx9/vGh5lySHw6GTJ0/qqaeeKuZkfwgMDFSnTp1ks/2xYqrNZlPnzp2LtbxnZWVp1KhRl72p1uFwKCUlRf369bvkKD0AAAAFHtdly5Ytev311y+YW/5XeXl5WrBggdatW1dMyS40cODAAjkdDocGDhxYrBleffVVHT9+/JI31J5nsVi0adMmbd26tZiSAQAAs2EKDa7L+vXrNXToUMXHx8tms112xNjDw0Ply5fX/v37VbZs2WJMeU5mZqbKly/v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\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# At this stage you may ignore what convolution or pooling means\n",
    "train_model = cnn.CNNModelHelper(name=\"mnist_train\")\n",
    "conv1 = train_model.Conv('data', 'conv1', dim_in=1, dim_out=20, kernel=5)\n",
    "pool1 = train_model.MaxPool(conv1, 'pool1', kernel=2, stride=2)\n",
    "conv2 = train_model.Conv(pool1, 'conv2', dim_in=20, dim_out=50, kernel=5)\n",
    "pool2 = train_model.MaxPool(conv2, 'pool2', kernel=2, stride=2)\n",
    "fc3 = train_model.FC(pool2, 'fc3', dim_in=50 * 4 * 4, dim_out=500)\n",
    "fc3 = train_model.Relu(fc3, 'relu3')\n",
    "pred = train_model.FC(fc3, 'pred', dim_in=500, dim_out=10)\n",
    "softmax = train_model.Softmax(pred, 'softmax')\n",
    "\n",
    "graph = net_drawer.GetPydotGraph(train_model, rankdir=\"TD\")\n",
    "Image(graph.create_png())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 6. Explaining - Assistive Funcationalities of Model Helpers\n",
    "\n",
    "**The main functionalities of model_helper are**:\n",
    "\n",
    "1) Creating an outer shell (A Protobuf Object) which can hold the all necessary objects. \n",
    "\n",
    "2) Holding input data blobs\n",
    "\n",
    "3) Holding network objects created using Core.Net, model_helper.net, or Brew, or CNN Model Helpers.  \n",
    "\n",
    "4) Holding Training Parameters such as Loss, Accuracies, Optimizers.\n",
    "\n",
    "5) Logging Network Summaries\n",
    "\n",
    "6) Helping workspace to initialize network parameters\n",
    "\n",
    "7) Helping workspace to create a trainable network.\n",
    "\n",
    "8) Helping workspace to validate and test a trained network\n",
    "\n",
    "Below Is an example of how model_helpers facilitates the 8 functions mentioned above. \n",
    "\n",
    "**Note: Please ignore the intracate functions used to demonstrate the steps mentioned above**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**Step1: Create an outer shell**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Outer shell object is:  <caffe2.python.model_helper.ModelHelper object at 0x7f4d21fc0090>\n"
     ]
    }
   ],
   "source": [
    "# Adopted from: https://caffe2.ai/docs/tutorial-MNIST.html\n",
    "\n",
    "############################################################################################################\n",
    "printmd(\"**Step1: Create an outer shell**\")\n",
    "arg_scope = {\"order\": \"NCHW\"}\n",
    "train_model = model_helper.ModelHelper(name=\"mnist_train\", arg_scope=arg_scope)\n",
    "print \"Outer shell object is: \", train_model\n",
    "############################################################################################################"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**Step2: Adding input blob data**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lmdb train db found!\n",
      "lmdb test db found!\n"
     ]
    },
    {
     "data": {
      "text/markdown": [
       "Looks like you ran this before, so we need to cleanup those old files..."
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data folder:/home/abhi/caffe2_notebooks/tutorial_data/mnist\n",
      "workspace root folder:/home/abhi/caffe2_notebooks/tutorial_files/tutorial_mnist\n",
      "Current Model Helper proto:\n",
      "\n",
      "name: \"mnist_train_4\"\n",
      "op {\n",
      "  input: \"dbreader_/home/abhi/caffe2_notebooks/tutorial_data/mnist/mnist-train-nchw-lmdb\"\n",
      "  output: \"data_uint8\"\n",
      "  output: \"label\"\n",
      "  name: \"\"\n",
      "  type: \"TensorProtosDBInput\"\n",
      "  arg {\n",
      "    name: \"batch_size\"\n",
      "    i: 64\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"data_uint8\"\n",
      "  output: \"data\"\n",
      "  name: \"\"\n",
      "  type: \"Cast\"\n",
      "  arg {\n",
      "    name: \"to\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"data\"\n",
      "  output: \"data\"\n",
      "  name: \"\"\n",
      "  type: \"Scale\"\n",
      "  arg {\n",
      "    name: \"scale\"\n",
      "    f: 0.00390625\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"data\"\n",
      "  output: \"data\"\n",
      "  name: \"\"\n",
      "  type: \"StopGradient\"\n",
      "}\n",
      "external_input: \"dbreader_/home/abhi/caffe2_notebooks/tutorial_data/mnist/mnist-train-nchw-lmdb\"\n",
      "\n"
     ]
    }
   ],
   "source": [
    "############################################################################################################\n",
    "printmd(\"**Step2: Adding input blob data**\")\n",
    "def DownloadResource(url, path):\n",
    "    '''Downloads resources from s3 by url and unzips them to the provided path'''\n",
    "    import requests, zipfile, StringIO\n",
    "    print(\"Downloading... {} to {}\".format(url, path))\n",
    "    r = requests.get(url, stream=True)\n",
    "    z = zipfile.ZipFile(StringIO.StringIO(r.content))\n",
    "    z.extractall(path)\n",
    "    print(\"Completed download and extraction.\")\n",
    "current_folder = os.path.join(os.path.expanduser('~'), 'caffe2_notebooks')\n",
    "data_folder = os.path.join(current_folder, 'tutorial_data', 'mnist')\n",
    "root_folder = os.path.join(current_folder, 'tutorial_files', 'tutorial_mnist')\n",
    "db_missing = False\n",
    "if not os.path.exists(data_folder):\n",
    "    os.makedirs(data_folder)   \n",
    "    print(\"Your data folder was not found!! This was generated: {}\".format(data_folder))\n",
    "# Look for existing database: lmdb\n",
    "if os.path.exists(os.path.join(data_folder,\"mnist-train-nchw-lmdb\")):\n",
    "    print(\"lmdb train db found!\")\n",
    "else:\n",
    "    db_missing = True\n",
    "if os.path.exists(os.path.join(data_folder,\"mnist-test-nchw-lmdb\")):\n",
    "    print(\"lmdb test db found!\")\n",
    "else:\n",
    "    db_missing = True\n",
    "# attempt the download of the db if either was missing\n",
    "if db_missing:\n",
    "    print(\"one or both of the MNIST lmbd dbs not found!!\")\n",
    "    db_url = \"http://download.caffe2.ai/databases/mnist-lmdb.zip\"\n",
    "    try:\n",
    "        DownloadResource(db_url, data_folder)\n",
    "    except Exception as ex:\n",
    "        print(\"Failed to download dataset. Please download it manually from {}\".format(db_url))\n",
    "        print(\"Unzip it and place the two database folders here: {}\".format(data_folder))\n",
    "        raise ex\n",
    "if os.path.exists(root_folder):\n",
    "    printmd(\"Looks like you ran this before, so we need to cleanup those old files...\")\n",
    "    shutil.rmtree(root_folder)\n",
    "os.makedirs(root_folder)\n",
    "workspace.ResetWorkspace(root_folder)\n",
    "print(\"data folder:\" + data_folder)\n",
    "print(\"workspace root folder:\" + root_folder)\n",
    "\n",
    "def AddInput(model, batch_size, db, db_type):\n",
    "    data_uint8, label = brew.db_input(\n",
    "        model,\n",
    "        blobs_out=[\"data_uint8\", \"label\"],\n",
    "        batch_size=batch_size,\n",
    "        db=db,\n",
    "        db_type=db_type,\n",
    "    )\n",
    "    data = model.Cast(data_uint8, \"data\", to=core.DataType.FLOAT)\n",
    "    data = model.Scale(data, data, scale=float(1./256))\n",
    "    data = model.StopGradient(data, data)\n",
    "    return data, label\n",
    "data, label = AddInput(\n",
    "    train_model, batch_size=64,\n",
    "    db=os.path.join(data_folder, 'mnist-train-nchw-lmdb'),\n",
    "    db_type='lmdb')\n",
    "print(\"Current Model Helper proto:\\n\\n{}\".format(train_model.Proto()))\n",
    "############################################################################################################"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**Step3: Creating and adding network to the model**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Current Model Helper proto:\n",
      "\n",
      "name: \"mnist_train_4\"\n",
      "op {\n",
      "  input: \"dbreader_/home/abhi/caffe2_notebooks/tutorial_data/mnist/mnist-train-nchw-lmdb\"\n",
      "  output: \"data_uint8\"\n",
      "  output: \"label\"\n",
      "  name: \"\"\n",
      "  type: \"TensorProtosDBInput\"\n",
      "  arg {\n",
      "    name: \"batch_size\"\n",
      "    i: 64\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"data_uint8\"\n",
      "  output: \"data\"\n",
      "  name: \"\"\n",
      "  type: \"Cast\"\n",
      "  arg {\n",
      "    name: \"to\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"data\"\n",
      "  output: \"data\"\n",
      "  name: \"\"\n",
      "  type: \"Scale\"\n",
      "  arg {\n",
      "    name: \"scale\"\n",
      "    f: 0.00390625\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"data\"\n",
      "  output: \"data\"\n",
      "  name: \"\"\n",
      "  type: \"StopGradient\"\n",
      "}\n",
      "op {\n",
      "  input: \"data\"\n",
      "  input: \"conv1_w\"\n",
      "  input: \"conv1_b\"\n",
      "  output: \"conv1\"\n",
      "  name: \"\"\n",
      "  type: \"Conv\"\n",
      "  arg {\n",
      "    name: \"kernel\"\n",
      "    i: 5\n",
      "  }\n",
      "  arg {\n",
      "    name: \"exhaustive_search\"\n",
      "    i: 0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"order\"\n",
      "    s: \"NCHW\"\n",
      "  }\n",
      "  engine: \"CUDNN\"\n",
      "}\n",
      "op {\n",
      "  input: \"conv1\"\n",
      "  output: \"pool1\"\n",
      "  name: \"\"\n",
      "  type: \"MaxPool\"\n",
      "  arg {\n",
      "    name: \"kernel\"\n",
      "    i: 2\n",
      "  }\n",
      "  arg {\n",
      "    name: \"stride\"\n",
      "    i: 2\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"pool1\"\n",
      "  input: \"conv2_w\"\n",
      "  input: \"conv2_b\"\n",
      "  output: \"conv2\"\n",
      "  name: \"\"\n",
      "  type: \"Conv\"\n",
      "  arg {\n",
      "    name: \"kernel\"\n",
      "    i: 5\n",
      "  }\n",
      "  arg {\n",
      "    name: \"exhaustive_search\"\n",
      "    i: 0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"order\"\n",
      "    s: \"NCHW\"\n",
      "  }\n",
      "  engine: \"CUDNN\"\n",
      "}\n",
      "op {\n",
      "  input: \"conv2\"\n",
      "  output: \"pool2\"\n",
      "  name: \"\"\n",
      "  type: \"MaxPool\"\n",
      "  arg {\n",
      "    name: \"kernel\"\n",
      "    i: 2\n",
      "  }\n",
      "  arg {\n",
      "    name: \"stride\"\n",
      "    i: 2\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"pool2\"\n",
      "  input: \"fc3_w\"\n",
      "  input: \"fc3_b\"\n",
      "  output: \"fc3\"\n",
      "  name: \"\"\n",
      "  type: \"FC\"\n",
      "  arg {\n",
      "    name: \"use_cudnn\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"order\"\n",
      "    s: \"NCHW\"\n",
      "  }\n",
      "  arg {\n",
      "    name: \"cudnn_exhaustive_search\"\n",
      "    i: 0\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"fc3\"\n",
      "  output: \"relu3\"\n",
      "  name: \"\"\n",
      "  type: \"Relu\"\n",
      "}\n",
      "op {\n",
      "  input: \"relu3\"\n",
      "  input: \"pred_w\"\n",
      "  input: \"pred_b\"\n",
      "  output: \"pred\"\n",
      "  name: \"\"\n",
      "  type: \"FC\"\n",
      "  arg {\n",
      "    name: \"use_cudnn\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"order\"\n",
      "    s: \"NCHW\"\n",
      "  }\n",
      "  arg {\n",
      "    name: \"cudnn_exhaustive_search\"\n",
      "    i: 0\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"pred\"\n",
      "  output: \"softmax\"\n",
      "  name: \"\"\n",
      "  type: \"Softmax\"\n",
      "}\n",
      "external_input: \"dbreader_/home/abhi/caffe2_notebooks/tutorial_data/mnist/mnist-train-nchw-lmdb\"\n",
      "external_input: \"conv1_w\"\n",
      "external_input: \"conv1_b\"\n",
      "external_input: \"conv2_w\"\n",
      "external_input: \"conv2_b\"\n",
      "external_input: \"fc3_w\"\n",
      "external_input: \"fc3_b\"\n",
      "external_input: \"pred_w\"\n",
      "external_input: \"pred_b\"\n",
      "\n"
     ]
    }
   ],
   "source": [
    "############################################################################################################\n",
    "printmd(\"**Step3: Creating and adding network to the model**\")\n",
    "# For this tutorial we used a combination of brew and model_helper.net sub-modules\n",
    "def AddModel(model, data):\n",
    "    conv1 = brew.conv(model, data, 'conv1', dim_in=1, dim_out=20, kernel=5)\n",
    "    pool1 = model.net.MaxPool(conv1, 'pool1', kernel=2, stride=2)\n",
    "    conv2 = brew.conv(model, pool1, 'conv2', dim_in=20, dim_out=50, kernel=5)\n",
    "    pool2 = model.net.MaxPool(conv2, 'pool2', kernel=2, stride=2)\n",
    "    fc3 = brew.fc(model, pool2, 'fc3', dim_in=50 * 4 * 4, dim_out=500)\n",
    "    fc3 = model.net.Relu(fc3, 'relu3')\n",
    "    pred = brew.fc(model, fc3, 'pred', 500, 10)\n",
    "    softmax = model.net.Softmax(pred, 'softmax')\n",
    "    return softmax\n",
    "softmax = AddModel(train_model, data)\n",
    "print(\"Current Model Helper proto:\\n\\n{}\".format(train_model.Proto()))\n",
    "############################################################################################################"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**Step4: Adding training parameters**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Current Model Helper proto:\n",
      "\n",
      "name: \"mnist_train_4\"\n",
      "op {\n",
      "  input: \"dbreader_/home/abhi/caffe2_notebooks/tutorial_data/mnist/mnist-train-nchw-lmdb\"\n",
      "  output: \"data_uint8\"\n",
      "  output: \"label\"\n",
      "  name: \"\"\n",
      "  type: \"TensorProtosDBInput\"\n",
      "  arg {\n",
      "    name: \"batch_size\"\n",
      "    i: 64\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"data_uint8\"\n",
      "  output: \"data\"\n",
      "  name: \"\"\n",
      "  type: \"Cast\"\n",
      "  arg {\n",
      "    name: \"to\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"data\"\n",
      "  output: \"data\"\n",
      "  name: \"\"\n",
      "  type: \"Scale\"\n",
      "  arg {\n",
      "    name: \"scale\"\n",
      "    f: 0.00390625\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"data\"\n",
      "  output: \"data\"\n",
      "  name: \"\"\n",
      "  type: \"StopGradient\"\n",
      "}\n",
      "op {\n",
      "  input: \"data\"\n",
      "  input: \"conv1_w\"\n",
      "  input: \"conv1_b\"\n",
      "  output: \"conv1\"\n",
      "  name: \"\"\n",
      "  type: \"Conv\"\n",
      "  arg {\n",
      "    name: \"kernel\"\n",
      "    i: 5\n",
      "  }\n",
      "  arg {\n",
      "    name: \"exhaustive_search\"\n",
      "    i: 0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"order\"\n",
      "    s: \"NCHW\"\n",
      "  }\n",
      "  engine: \"CUDNN\"\n",
      "}\n",
      "op {\n",
      "  input: \"conv1\"\n",
      "  output: \"pool1\"\n",
      "  name: \"\"\n",
      "  type: \"MaxPool\"\n",
      "  arg {\n",
      "    name: \"kernel\"\n",
      "    i: 2\n",
      "  }\n",
      "  arg {\n",
      "    name: \"stride\"\n",
      "    i: 2\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"pool1\"\n",
      "  input: \"conv2_w\"\n",
      "  input: \"conv2_b\"\n",
      "  output: \"conv2\"\n",
      "  name: \"\"\n",
      "  type: \"Conv\"\n",
      "  arg {\n",
      "    name: \"kernel\"\n",
      "    i: 5\n",
      "  }\n",
      "  arg {\n",
      "    name: \"exhaustive_search\"\n",
      "    i: 0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"order\"\n",
      "    s: \"NCHW\"\n",
      "  }\n",
      "  engine: \"CUDNN\"\n",
      "}\n",
      "op {\n",
      "  input: \"conv2\"\n",
      "  output: \"pool2\"\n",
      "  name: \"\"\n",
      "  type: \"MaxPool\"\n",
      "  arg {\n",
      "    name: \"kernel\"\n",
      "    i: 2\n",
      "  }\n",
      "  arg {\n",
      "    name: \"stride\"\n",
      "    i: 2\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"pool2\"\n",
      "  input: \"fc3_w\"\n",
      "  input: \"fc3_b\"\n",
      "  output: \"fc3\"\n",
      "  name: \"\"\n",
      "  type: \"FC\"\n",
      "  arg {\n",
      "    name: \"use_cudnn\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"order\"\n",
      "    s: \"NCHW\"\n",
      "  }\n",
      "  arg {\n",
      "    name: \"cudnn_exhaustive_search\"\n",
      "    i: 0\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"fc3\"\n",
      "  output: \"relu3\"\n",
      "  name: \"\"\n",
      "  type: \"Relu\"\n",
      "}\n",
      "op {\n",
      "  input: \"relu3\"\n",
      "  input: \"pred_w\"\n",
      "  input: \"pred_b\"\n",
      "  output: \"pred\"\n",
      "  name: \"\"\n",
      "  type: \"FC\"\n",
      "  arg {\n",
      "    name: \"use_cudnn\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"order\"\n",
      "    s: \"NCHW\"\n",
      "  }\n",
      "  arg {\n",
      "    name: \"cudnn_exhaustive_search\"\n",
      "    i: 0\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"pred\"\n",
      "  output: \"softmax\"\n",
      "  name: \"\"\n",
      "  type: \"Softmax\"\n",
      "}\n",
      "op {\n",
      "  input: \"softmax\"\n",
      "  input: \"label\"\n",
      "  output: \"xent\"\n",
      "  name: \"\"\n",
      "  type: \"LabelCrossEntropy\"\n",
      "}\n",
      "op {\n",
      "  input: \"xent\"\n",
      "  output: \"loss\"\n",
      "  name: \"\"\n",
      "  type: \"AveragedLoss\"\n",
      "}\n",
      "op {\n",
      "  input: \"softmax\"\n",
      "  input: \"label\"\n",
      "  output: \"accuracy\"\n",
      "  name: \"\"\n",
      "  type: \"Accuracy\"\n",
      "}\n",
      "op {\n",
      "  input: \"loss\"\n",
      "  output: \"loss_autogen_grad\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"value\"\n",
      "    f: 1.0\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"xent\"\n",
      "  input: \"loss_autogen_grad\"\n",
      "  output: \"xent_grad\"\n",
      "  name: \"\"\n",
      "  type: \"AveragedLossGradient\"\n",
      "  is_gradient_op: true\n",
      "}\n",
      "op {\n",
      "  input: \"softmax\"\n",
      "  input: \"label\"\n",
      "  input: \"xent_grad\"\n",
      "  output: \"softmax_grad\"\n",
      "  name: \"\"\n",
      "  type: \"LabelCrossEntropyGradient\"\n",
      "  is_gradient_op: true\n",
      "}\n",
      "op {\n",
      "  input: \"softmax\"\n",
      "  input: \"softmax_grad\"\n",
      "  output: \"pred_grad\"\n",
      "  name: \"\"\n",
      "  type: \"SoftmaxGradient\"\n",
      "  is_gradient_op: true\n",
      "}\n",
      "op {\n",
      "  input: \"relu3\"\n",
      "  input: \"pred_w\"\n",
      "  input: \"pred_grad\"\n",
      "  output: \"pred_w_grad\"\n",
      "  output: \"pred_b_grad\"\n",
      "  output: \"relu3_grad\"\n",
      "  name: \"\"\n",
      "  type: \"FCGradient\"\n",
      "  arg {\n",
      "    name: \"use_cudnn\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"order\"\n",
      "    s: \"NCHW\"\n",
      "  }\n",
      "  arg {\n",
      "    name: \"cudnn_exhaustive_search\"\n",
      "    i: 0\n",
      "  }\n",
      "  is_gradient_op: true\n",
      "}\n",
      "op {\n",
      "  input: \"relu3\"\n",
      "  input: \"relu3_grad\"\n",
      "  output: \"fc3_grad\"\n",
      "  name: \"\"\n",
      "  type: \"ReluGradient\"\n",
      "  is_gradient_op: true\n",
      "}\n",
      "op {\n",
      "  input: \"pool2\"\n",
      "  input: \"fc3_w\"\n",
      "  input: \"fc3_grad\"\n",
      "  output: \"fc3_w_grad\"\n",
      "  output: \"fc3_b_grad\"\n",
      "  output: \"pool2_grad\"\n",
      "  name: \"\"\n",
      "  type: \"FCGradient\"\n",
      "  arg {\n",
      "    name: \"use_cudnn\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"order\"\n",
      "    s: \"NCHW\"\n",
      "  }\n",
      "  arg {\n",
      "    name: \"cudnn_exhaustive_search\"\n",
      "    i: 0\n",
      "  }\n",
      "  is_gradient_op: true\n",
      "}\n",
      "op {\n",
      "  input: \"conv2\"\n",
      "  input: \"pool2\"\n",
      "  input: \"pool2_grad\"\n",
      "  output: \"conv2_grad\"\n",
      "  name: \"\"\n",
      "  type: \"MaxPoolGradient\"\n",
      "  arg {\n",
      "    name: \"kernel\"\n",
      "    i: 2\n",
      "  }\n",
      "  arg {\n",
      "    name: \"stride\"\n",
      "    i: 2\n",
      "  }\n",
      "  is_gradient_op: true\n",
      "}\n",
      "op {\n",
      "  input: \"pool1\"\n",
      "  input: \"conv2_w\"\n",
      "  input: \"conv2_grad\"\n",
      "  output: \"conv2_w_grad\"\n",
      "  output: \"conv2_b_grad\"\n",
      "  output: \"pool1_grad\"\n",
      "  name: \"\"\n",
      "  type: \"ConvGradient\"\n",
      "  arg {\n",
      "    name: \"kernel\"\n",
      "    i: 5\n",
      "  }\n",
      "  arg {\n",
      "    name: \"exhaustive_search\"\n",
      "    i: 0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"order\"\n",
      "    s: \"NCHW\"\n",
      "  }\n",
      "  engine: \"CUDNN\"\n",
      "  is_gradient_op: true\n",
      "}\n",
      "op {\n",
      "  input: \"conv1\"\n",
      "  input: \"pool1\"\n",
      "  input: \"pool1_grad\"\n",
      "  output: \"conv1_grad\"\n",
      "  name: \"\"\n",
      "  type: \"MaxPoolGradient\"\n",
      "  arg {\n",
      "    name: \"kernel\"\n",
      "    i: 2\n",
      "  }\n",
      "  arg {\n",
      "    name: \"stride\"\n",
      "    i: 2\n",
      "  }\n",
      "  is_gradient_op: true\n",
      "}\n",
      "op {\n",
      "  input: \"data\"\n",
      "  input: \"conv1_w\"\n",
      "  input: \"conv1_grad\"\n",
      "  output: \"conv1_w_grad\"\n",
      "  output: \"conv1_b_grad\"\n",
      "  output: \"data_grad\"\n",
      "  name: \"\"\n",
      "  type: \"ConvGradient\"\n",
      "  arg {\n",
      "    name: \"kernel\"\n",
      "    i: 5\n",
      "  }\n",
      "  arg {\n",
      "    name: \"exhaustive_search\"\n",
      "    i: 0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"order\"\n",
      "    s: \"NCHW\"\n",
      "  }\n",
      "  engine: \"CUDNN\"\n",
      "  is_gradient_op: true\n",
      "}\n",
      "op {\n",
      "  input: \"iteration_mutex\"\n",
      "  input: \"optimizer_iteration\"\n",
      "  output: \"optimizer_iteration\"\n",
      "  name: \"\"\n",
      "  type: \"AtomicIter\"\n",
      "  device_option {\n",
      "    device_type: 0\n",
      "    cuda_gpu_id: 0\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"optimizer_iteration\"\n",
      "  output: \"SgdOptimizer_0_lr_cpu\"\n",
      "  name: \"\"\n",
      "  type: \"LearningRate\"\n",
      "  arg {\n",
      "    name: \"policy\"\n",
      "    s: \"step\"\n",
      "  }\n",
      "  arg {\n",
      "    name: \"stepsize\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"base_lr\"\n",
      "    f: 0.0010000000475\n",
      "  }\n",
      "  arg {\n",
      "    name: \"gamma\"\n",
      "    f: 0.999000012875\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"pred_b_grad\"\n",
      "  input: \"pred_b_momentum\"\n",
      "  input: \"SgdOptimizer_0_lr_cpu\"\n",
      "  input: \"pred_b\"\n",
      "  output: \"pred_b_grad\"\n",
      "  output: \"pred_b_momentum\"\n",
      "  output: \"pred_b\"\n",
      "  name: \"\"\n",
      "  type: \"MomentumSGDUpdate\"\n",
      "  arg {\n",
      "    name: \"nesterov\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"momentum\"\n",
      "    f: 0.899999976158\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"conv1_b_grad\"\n",
      "  input: \"conv1_b_momentum\"\n",
      "  input: \"SgdOptimizer_0_lr_cpu\"\n",
      "  input: \"conv1_b\"\n",
      "  output: \"conv1_b_grad\"\n",
      "  output: \"conv1_b_momentum\"\n",
      "  output: \"conv1_b\"\n",
      "  name: \"\"\n",
      "  type: \"MomentumSGDUpdate\"\n",
      "  arg {\n",
      "    name: \"nesterov\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"momentum\"\n",
      "    f: 0.899999976158\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"conv2_b_grad\"\n",
      "  input: \"conv2_b_momentum\"\n",
      "  input: \"SgdOptimizer_0_lr_cpu\"\n",
      "  input: \"conv2_b\"\n",
      "  output: \"conv2_b_grad\"\n",
      "  output: \"conv2_b_momentum\"\n",
      "  output: \"conv2_b\"\n",
      "  name: \"\"\n",
      "  type: \"MomentumSGDUpdate\"\n",
      "  arg {\n",
      "    name: \"nesterov\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"momentum\"\n",
      "    f: 0.899999976158\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"fc3_w_grad\"\n",
      "  input: \"fc3_w_momentum\"\n",
      "  input: \"SgdOptimizer_0_lr_cpu\"\n",
      "  input: \"fc3_w\"\n",
      "  output: \"fc3_w_grad\"\n",
      "  output: \"fc3_w_momentum\"\n",
      "  output: \"fc3_w\"\n",
      "  name: \"\"\n",
      "  type: \"MomentumSGDUpdate\"\n",
      "  arg {\n",
      "    name: \"nesterov\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"momentum\"\n",
      "    f: 0.899999976158\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"pred_w_grad\"\n",
      "  input: \"pred_w_momentum\"\n",
      "  input: \"SgdOptimizer_0_lr_cpu\"\n",
      "  input: \"pred_w\"\n",
      "  output: \"pred_w_grad\"\n",
      "  output: \"pred_w_momentum\"\n",
      "  output: \"pred_w\"\n",
      "  name: \"\"\n",
      "  type: \"MomentumSGDUpdate\"\n",
      "  arg {\n",
      "    name: \"nesterov\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"momentum\"\n",
      "    f: 0.899999976158\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"conv2_w_grad\"\n",
      "  input: \"conv2_w_momentum\"\n",
      "  input: \"SgdOptimizer_0_lr_cpu\"\n",
      "  input: \"conv2_w\"\n",
      "  output: \"conv2_w_grad\"\n",
      "  output: \"conv2_w_momentum\"\n",
      "  output: \"conv2_w\"\n",
      "  name: \"\"\n",
      "  type: \"MomentumSGDUpdate\"\n",
      "  arg {\n",
      "    name: \"nesterov\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"momentum\"\n",
      "    f: 0.899999976158\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"fc3_b_grad\"\n",
      "  input: \"fc3_b_momentum\"\n",
      "  input: \"SgdOptimizer_0_lr_cpu\"\n",
      "  input: \"fc3_b\"\n",
      "  output: \"fc3_b_grad\"\n",
      "  output: \"fc3_b_momentum\"\n",
      "  output: \"fc3_b\"\n",
      "  name: \"\"\n",
      "  type: \"MomentumSGDUpdate\"\n",
      "  arg {\n",
      "    name: \"nesterov\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"momentum\"\n",
      "    f: 0.899999976158\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"conv1_w_grad\"\n",
      "  input: \"conv1_w_momentum\"\n",
      "  input: \"SgdOptimizer_0_lr_cpu\"\n",
      "  input: \"conv1_w\"\n",
      "  output: \"conv1_w_grad\"\n",
      "  output: \"conv1_w_momentum\"\n",
      "  output: \"conv1_w\"\n",
      "  name: \"\"\n",
      "  type: \"MomentumSGDUpdate\"\n",
      "  arg {\n",
      "    name: \"nesterov\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"momentum\"\n",
      "    f: 0.899999976158\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "external_input: \"dbreader_/home/abhi/caffe2_notebooks/tutorial_data/mnist/mnist-train-nchw-lmdb\"\n",
      "external_input: \"conv1_w\"\n",
      "external_input: \"conv1_b\"\n",
      "external_input: \"conv2_w\"\n",
      "external_input: \"conv2_b\"\n",
      "external_input: \"fc3_w\"\n",
      "external_input: \"fc3_b\"\n",
      "external_input: \"pred_w\"\n",
      "external_input: \"pred_b\"\n",
      "external_input: \"iteration_mutex\"\n",
      "external_input: \"optimizer_iteration\"\n",
      "external_input: \"pred_b_momentum\"\n",
      "external_input: \"conv1_b_momentum\"\n",
      "external_input: \"conv2_b_momentum\"\n",
      "external_input: \"fc3_w_momentum\"\n",
      "external_input: \"pred_w_momentum\"\n",
      "external_input: \"conv2_w_momentum\"\n",
      "external_input: \"fc3_b_momentum\"\n",
      "external_input: \"conv1_w_momentum\"\n",
      "\n"
     ]
    }
   ],
   "source": [
    "############################################################################################################\n",
    "printmd(\"**Step4: Adding training parameters**\")\n",
    "def AddAccuracy(model, softmax, label):\n",
    "    \"\"\"Adds an accuracy op to the model\"\"\"\n",
    "    accuracy = model.Accuracy([softmax, label], \"accuracy\")\n",
    "    return accuracy\n",
    "base_lr = 0.001\n",
    "m_high = 0.9\n",
    "def AddTrainingOperators(model, softmax, label):\n",
    "    xent = model.LabelCrossEntropy([softmax, label], 'xent')\n",
    "    loss = model.AveragedLoss(xent, \"loss\")\n",
    "    AddAccuracy(model, softmax, label)\n",
    "    model.AddGradientOperators([loss])\n",
    "    optimizer.build_sgd(\n",
    "        model,\n",
    "        nesterov=1,\n",
    "        momentum=m_high,\n",
    "        base_learning_rate=base_lr,\n",
    "        policy=\"step\",\n",
    "        stepsize=1,\n",
    "        gamma=0.999,\n",
    "    )\n",
    "AddTrainingOperators(train_model, softmax, label)\n",
    "print(\"Current Model Helper proto:\\n\\n{}\".format(train_model.Proto()))\n",
    "############################################################################################################"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**Step5: Adding Summaries**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Current Model Helper proto:\n",
      "\n",
      "name: \"mnist_train_4\"\n",
      "op {\n",
      "  input: \"dbreader_/home/abhi/caffe2_notebooks/tutorial_data/mnist/mnist-train-nchw-lmdb\"\n",
      "  output: \"data_uint8\"\n",
      "  output: \"label\"\n",
      "  name: \"\"\n",
      "  type: \"TensorProtosDBInput\"\n",
      "  arg {\n",
      "    name: \"batch_size\"\n",
      "    i: 64\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"data_uint8\"\n",
      "  output: \"data\"\n",
      "  name: \"\"\n",
      "  type: \"Cast\"\n",
      "  arg {\n",
      "    name: \"to\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"data\"\n",
      "  output: \"data\"\n",
      "  name: \"\"\n",
      "  type: \"Scale\"\n",
      "  arg {\n",
      "    name: \"scale\"\n",
      "    f: 0.00390625\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"data\"\n",
      "  output: \"data\"\n",
      "  name: \"\"\n",
      "  type: \"StopGradient\"\n",
      "}\n",
      "op {\n",
      "  input: \"data\"\n",
      "  input: \"conv1_w\"\n",
      "  input: \"conv1_b\"\n",
      "  output: \"conv1\"\n",
      "  name: \"\"\n",
      "  type: \"Conv\"\n",
      "  arg {\n",
      "    name: \"kernel\"\n",
      "    i: 5\n",
      "  }\n",
      "  arg {\n",
      "    name: \"exhaustive_search\"\n",
      "    i: 0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"order\"\n",
      "    s: \"NCHW\"\n",
      "  }\n",
      "  engine: \"CUDNN\"\n",
      "}\n",
      "op {\n",
      "  input: \"conv1\"\n",
      "  output: \"pool1\"\n",
      "  name: \"\"\n",
      "  type: \"MaxPool\"\n",
      "  arg {\n",
      "    name: \"kernel\"\n",
      "    i: 2\n",
      "  }\n",
      "  arg {\n",
      "    name: \"stride\"\n",
      "    i: 2\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"pool1\"\n",
      "  input: \"conv2_w\"\n",
      "  input: \"conv2_b\"\n",
      "  output: \"conv2\"\n",
      "  name: \"\"\n",
      "  type: \"Conv\"\n",
      "  arg {\n",
      "    name: \"kernel\"\n",
      "    i: 5\n",
      "  }\n",
      "  arg {\n",
      "    name: \"exhaustive_search\"\n",
      "    i: 0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"order\"\n",
      "    s: \"NCHW\"\n",
      "  }\n",
      "  engine: \"CUDNN\"\n",
      "}\n",
      "op {\n",
      "  input: \"conv2\"\n",
      "  output: \"pool2\"\n",
      "  name: \"\"\n",
      "  type: \"MaxPool\"\n",
      "  arg {\n",
      "    name: \"kernel\"\n",
      "    i: 2\n",
      "  }\n",
      "  arg {\n",
      "    name: \"stride\"\n",
      "    i: 2\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"pool2\"\n",
      "  input: \"fc3_w\"\n",
      "  input: \"fc3_b\"\n",
      "  output: \"fc3\"\n",
      "  name: \"\"\n",
      "  type: \"FC\"\n",
      "  arg {\n",
      "    name: \"use_cudnn\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"order\"\n",
      "    s: \"NCHW\"\n",
      "  }\n",
      "  arg {\n",
      "    name: \"cudnn_exhaustive_search\"\n",
      "    i: 0\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"fc3\"\n",
      "  output: \"relu3\"\n",
      "  name: \"\"\n",
      "  type: \"Relu\"\n",
      "}\n",
      "op {\n",
      "  input: \"relu3\"\n",
      "  input: \"pred_w\"\n",
      "  input: \"pred_b\"\n",
      "  output: \"pred\"\n",
      "  name: \"\"\n",
      "  type: \"FC\"\n",
      "  arg {\n",
      "    name: \"use_cudnn\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"order\"\n",
      "    s: \"NCHW\"\n",
      "  }\n",
      "  arg {\n",
      "    name: \"cudnn_exhaustive_search\"\n",
      "    i: 0\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"pred\"\n",
      "  output: \"softmax\"\n",
      "  name: \"\"\n",
      "  type: \"Softmax\"\n",
      "}\n",
      "op {\n",
      "  input: \"softmax\"\n",
      "  input: \"label\"\n",
      "  output: \"xent\"\n",
      "  name: \"\"\n",
      "  type: \"LabelCrossEntropy\"\n",
      "}\n",
      "op {\n",
      "  input: \"xent\"\n",
      "  output: \"loss\"\n",
      "  name: \"\"\n",
      "  type: \"AveragedLoss\"\n",
      "}\n",
      "op {\n",
      "  input: \"softmax\"\n",
      "  input: \"label\"\n",
      "  output: \"accuracy\"\n",
      "  name: \"\"\n",
      "  type: \"Accuracy\"\n",
      "}\n",
      "op {\n",
      "  input: \"loss\"\n",
      "  output: \"loss_autogen_grad\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"value\"\n",
      "    f: 1.0\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"xent\"\n",
      "  input: \"loss_autogen_grad\"\n",
      "  output: \"xent_grad\"\n",
      "  name: \"\"\n",
      "  type: \"AveragedLossGradient\"\n",
      "  is_gradient_op: true\n",
      "}\n",
      "op {\n",
      "  input: \"softmax\"\n",
      "  input: \"label\"\n",
      "  input: \"xent_grad\"\n",
      "  output: \"softmax_grad\"\n",
      "  name: \"\"\n",
      "  type: \"LabelCrossEntropyGradient\"\n",
      "  is_gradient_op: true\n",
      "}\n",
      "op {\n",
      "  input: \"softmax\"\n",
      "  input: \"softmax_grad\"\n",
      "  output: \"pred_grad\"\n",
      "  name: \"\"\n",
      "  type: \"SoftmaxGradient\"\n",
      "  is_gradient_op: true\n",
      "}\n",
      "op {\n",
      "  input: \"relu3\"\n",
      "  input: \"pred_w\"\n",
      "  input: \"pred_grad\"\n",
      "  output: \"pred_w_grad\"\n",
      "  output: \"pred_b_grad\"\n",
      "  output: \"relu3_grad\"\n",
      "  name: \"\"\n",
      "  type: \"FCGradient\"\n",
      "  arg {\n",
      "    name: \"use_cudnn\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"order\"\n",
      "    s: \"NCHW\"\n",
      "  }\n",
      "  arg {\n",
      "    name: \"cudnn_exhaustive_search\"\n",
      "    i: 0\n",
      "  }\n",
      "  is_gradient_op: true\n",
      "}\n",
      "op {\n",
      "  input: \"relu3\"\n",
      "  input: \"relu3_grad\"\n",
      "  output: \"fc3_grad\"\n",
      "  name: \"\"\n",
      "  type: \"ReluGradient\"\n",
      "  is_gradient_op: true\n",
      "}\n",
      "op {\n",
      "  input: \"pool2\"\n",
      "  input: \"fc3_w\"\n",
      "  input: \"fc3_grad\"\n",
      "  output: \"fc3_w_grad\"\n",
      "  output: \"fc3_b_grad\"\n",
      "  output: \"pool2_grad\"\n",
      "  name: \"\"\n",
      "  type: \"FCGradient\"\n",
      "  arg {\n",
      "    name: \"use_cudnn\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"order\"\n",
      "    s: \"NCHW\"\n",
      "  }\n",
      "  arg {\n",
      "    name: \"cudnn_exhaustive_search\"\n",
      "    i: 0\n",
      "  }\n",
      "  is_gradient_op: true\n",
      "}\n",
      "op {\n",
      "  input: \"conv2\"\n",
      "  input: \"pool2\"\n",
      "  input: \"pool2_grad\"\n",
      "  output: \"conv2_grad\"\n",
      "  name: \"\"\n",
      "  type: \"MaxPoolGradient\"\n",
      "  arg {\n",
      "    name: \"kernel\"\n",
      "    i: 2\n",
      "  }\n",
      "  arg {\n",
      "    name: \"stride\"\n",
      "    i: 2\n",
      "  }\n",
      "  is_gradient_op: true\n",
      "}\n",
      "op {\n",
      "  input: \"pool1\"\n",
      "  input: \"conv2_w\"\n",
      "  input: \"conv2_grad\"\n",
      "  output: \"conv2_w_grad\"\n",
      "  output: \"conv2_b_grad\"\n",
      "  output: \"pool1_grad\"\n",
      "  name: \"\"\n",
      "  type: \"ConvGradient\"\n",
      "  arg {\n",
      "    name: \"kernel\"\n",
      "    i: 5\n",
      "  }\n",
      "  arg {\n",
      "    name: \"exhaustive_search\"\n",
      "    i: 0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"order\"\n",
      "    s: \"NCHW\"\n",
      "  }\n",
      "  engine: \"CUDNN\"\n",
      "  is_gradient_op: true\n",
      "}\n",
      "op {\n",
      "  input: \"conv1\"\n",
      "  input: \"pool1\"\n",
      "  input: \"pool1_grad\"\n",
      "  output: \"conv1_grad\"\n",
      "  name: \"\"\n",
      "  type: \"MaxPoolGradient\"\n",
      "  arg {\n",
      "    name: \"kernel\"\n",
      "    i: 2\n",
      "  }\n",
      "  arg {\n",
      "    name: \"stride\"\n",
      "    i: 2\n",
      "  }\n",
      "  is_gradient_op: true\n",
      "}\n",
      "op {\n",
      "  input: \"data\"\n",
      "  input: \"conv1_w\"\n",
      "  input: \"conv1_grad\"\n",
      "  output: \"conv1_w_grad\"\n",
      "  output: \"conv1_b_grad\"\n",
      "  output: \"data_grad\"\n",
      "  name: \"\"\n",
      "  type: \"ConvGradient\"\n",
      "  arg {\n",
      "    name: \"kernel\"\n",
      "    i: 5\n",
      "  }\n",
      "  arg {\n",
      "    name: \"exhaustive_search\"\n",
      "    i: 0\n",
      "  }\n",
      "  arg {\n",
      "    name: \"order\"\n",
      "    s: \"NCHW\"\n",
      "  }\n",
      "  engine: \"CUDNN\"\n",
      "  is_gradient_op: true\n",
      "}\n",
      "op {\n",
      "  input: \"iteration_mutex\"\n",
      "  input: \"optimizer_iteration\"\n",
      "  output: \"optimizer_iteration\"\n",
      "  name: \"\"\n",
      "  type: \"AtomicIter\"\n",
      "  device_option {\n",
      "    device_type: 0\n",
      "    cuda_gpu_id: 0\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"optimizer_iteration\"\n",
      "  output: \"SgdOptimizer_0_lr_cpu\"\n",
      "  name: \"\"\n",
      "  type: \"LearningRate\"\n",
      "  arg {\n",
      "    name: \"policy\"\n",
      "    s: \"step\"\n",
      "  }\n",
      "  arg {\n",
      "    name: \"stepsize\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"base_lr\"\n",
      "    f: 0.0010000000475\n",
      "  }\n",
      "  arg {\n",
      "    name: \"gamma\"\n",
      "    f: 0.999000012875\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"pred_b_grad\"\n",
      "  input: \"pred_b_momentum\"\n",
      "  input: \"SgdOptimizer_0_lr_cpu\"\n",
      "  input: \"pred_b\"\n",
      "  output: \"pred_b_grad\"\n",
      "  output: \"pred_b_momentum\"\n",
      "  output: \"pred_b\"\n",
      "  name: \"\"\n",
      "  type: \"MomentumSGDUpdate\"\n",
      "  arg {\n",
      "    name: \"nesterov\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"momentum\"\n",
      "    f: 0.899999976158\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"conv1_b_grad\"\n",
      "  input: \"conv1_b_momentum\"\n",
      "  input: \"SgdOptimizer_0_lr_cpu\"\n",
      "  input: \"conv1_b\"\n",
      "  output: \"conv1_b_grad\"\n",
      "  output: \"conv1_b_momentum\"\n",
      "  output: \"conv1_b\"\n",
      "  name: \"\"\n",
      "  type: \"MomentumSGDUpdate\"\n",
      "  arg {\n",
      "    name: \"nesterov\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"momentum\"\n",
      "    f: 0.899999976158\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"conv2_b_grad\"\n",
      "  input: \"conv2_b_momentum\"\n",
      "  input: \"SgdOptimizer_0_lr_cpu\"\n",
      "  input: \"conv2_b\"\n",
      "  output: \"conv2_b_grad\"\n",
      "  output: \"conv2_b_momentum\"\n",
      "  output: \"conv2_b\"\n",
      "  name: \"\"\n",
      "  type: \"MomentumSGDUpdate\"\n",
      "  arg {\n",
      "    name: \"nesterov\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"momentum\"\n",
      "    f: 0.899999976158\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"fc3_w_grad\"\n",
      "  input: \"fc3_w_momentum\"\n",
      "  input: \"SgdOptimizer_0_lr_cpu\"\n",
      "  input: \"fc3_w\"\n",
      "  output: \"fc3_w_grad\"\n",
      "  output: \"fc3_w_momentum\"\n",
      "  output: \"fc3_w\"\n",
      "  name: \"\"\n",
      "  type: \"MomentumSGDUpdate\"\n",
      "  arg {\n",
      "    name: \"nesterov\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"momentum\"\n",
      "    f: 0.899999976158\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"pred_w_grad\"\n",
      "  input: \"pred_w_momentum\"\n",
      "  input: \"SgdOptimizer_0_lr_cpu\"\n",
      "  input: \"pred_w\"\n",
      "  output: \"pred_w_grad\"\n",
      "  output: \"pred_w_momentum\"\n",
      "  output: \"pred_w\"\n",
      "  name: \"\"\n",
      "  type: \"MomentumSGDUpdate\"\n",
      "  arg {\n",
      "    name: \"nesterov\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"momentum\"\n",
      "    f: 0.899999976158\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"conv2_w_grad\"\n",
      "  input: \"conv2_w_momentum\"\n",
      "  input: \"SgdOptimizer_0_lr_cpu\"\n",
      "  input: \"conv2_w\"\n",
      "  output: \"conv2_w_grad\"\n",
      "  output: \"conv2_w_momentum\"\n",
      "  output: \"conv2_w\"\n",
      "  name: \"\"\n",
      "  type: \"MomentumSGDUpdate\"\n",
      "  arg {\n",
      "    name: \"nesterov\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"momentum\"\n",
      "    f: 0.899999976158\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"fc3_b_grad\"\n",
      "  input: \"fc3_b_momentum\"\n",
      "  input: \"SgdOptimizer_0_lr_cpu\"\n",
      "  input: \"fc3_b\"\n",
      "  output: \"fc3_b_grad\"\n",
      "  output: \"fc3_b_momentum\"\n",
      "  output: \"fc3_b\"\n",
      "  name: \"\"\n",
      "  type: \"MomentumSGDUpdate\"\n",
      "  arg {\n",
      "    name: \"nesterov\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"momentum\"\n",
      "    f: 0.899999976158\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"conv1_w_grad\"\n",
      "  input: \"conv1_w_momentum\"\n",
      "  input: \"SgdOptimizer_0_lr_cpu\"\n",
      "  input: \"conv1_w\"\n",
      "  output: \"conv1_w_grad\"\n",
      "  output: \"conv1_w_momentum\"\n",
      "  output: \"conv1_w\"\n",
      "  name: \"\"\n",
      "  type: \"MomentumSGDUpdate\"\n",
      "  arg {\n",
      "    name: \"nesterov\"\n",
      "    i: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"momentum\"\n",
      "    f: 0.899999976158\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"accuracy\"\n",
      "  name: \"\"\n",
      "  type: \"Print\"\n",
      "  arg {\n",
      "    name: \"to_file\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"loss\"\n",
      "  name: \"\"\n",
      "  type: \"Print\"\n",
      "  arg {\n",
      "    name: \"to_file\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"conv1_w\"\n",
      "  name: \"\"\n",
      "  type: \"Summarize\"\n",
      "  arg {\n",
      "    name: \"to_file\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"conv1_w_grad\"\n",
      "  name: \"\"\n",
      "  type: \"Summarize\"\n",
      "  arg {\n",
      "    name: \"to_file\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"conv1_b\"\n",
      "  name: \"\"\n",
      "  type: \"Summarize\"\n",
      "  arg {\n",
      "    name: \"to_file\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"conv1_b_grad\"\n",
      "  name: \"\"\n",
      "  type: \"Summarize\"\n",
      "  arg {\n",
      "    name: \"to_file\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"conv2_w\"\n",
      "  name: \"\"\n",
      "  type: \"Summarize\"\n",
      "  arg {\n",
      "    name: \"to_file\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"conv2_w_grad\"\n",
      "  name: \"\"\n",
      "  type: \"Summarize\"\n",
      "  arg {\n",
      "    name: \"to_file\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"conv2_b\"\n",
      "  name: \"\"\n",
      "  type: \"Summarize\"\n",
      "  arg {\n",
      "    name: \"to_file\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"conv2_b_grad\"\n",
      "  name: \"\"\n",
      "  type: \"Summarize\"\n",
      "  arg {\n",
      "    name: \"to_file\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"fc3_w\"\n",
      "  name: \"\"\n",
      "  type: \"Summarize\"\n",
      "  arg {\n",
      "    name: \"to_file\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"fc3_w_grad\"\n",
      "  name: \"\"\n",
      "  type: \"Summarize\"\n",
      "  arg {\n",
      "    name: \"to_file\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"fc3_b\"\n",
      "  name: \"\"\n",
      "  type: \"Summarize\"\n",
      "  arg {\n",
      "    name: \"to_file\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"fc3_b_grad\"\n",
      "  name: \"\"\n",
      "  type: \"Summarize\"\n",
      "  arg {\n",
      "    name: \"to_file\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"pred_w\"\n",
      "  name: \"\"\n",
      "  type: \"Summarize\"\n",
      "  arg {\n",
      "    name: \"to_file\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"pred_w_grad\"\n",
      "  name: \"\"\n",
      "  type: \"Summarize\"\n",
      "  arg {\n",
      "    name: \"to_file\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"pred_b\"\n",
      "  name: \"\"\n",
      "  type: \"Summarize\"\n",
      "  arg {\n",
      "    name: \"to_file\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"pred_b_grad\"\n",
      "  name: \"\"\n",
      "  type: \"Summarize\"\n",
      "  arg {\n",
      "    name: \"to_file\"\n",
      "    i: 1\n",
      "  }\n",
      "}\n",
      "external_input: \"dbreader_/home/abhi/caffe2_notebooks/tutorial_data/mnist/mnist-train-nchw-lmdb\"\n",
      "external_input: \"conv1_w\"\n",
      "external_input: \"conv1_b\"\n",
      "external_input: \"conv2_w\"\n",
      "external_input: \"conv2_b\"\n",
      "external_input: \"fc3_w\"\n",
      "external_input: \"fc3_b\"\n",
      "external_input: \"pred_w\"\n",
      "external_input: \"pred_b\"\n",
      "external_input: \"iteration_mutex\"\n",
      "external_input: \"optimizer_iteration\"\n",
      "external_input: \"pred_b_momentum\"\n",
      "external_input: \"conv1_b_momentum\"\n",
      "external_input: \"conv2_b_momentum\"\n",
      "external_input: \"fc3_w_momentum\"\n",
      "external_input: \"pred_w_momentum\"\n",
      "external_input: \"conv2_w_momentum\"\n",
      "external_input: \"fc3_b_momentum\"\n",
      "external_input: \"conv1_w_momentum\"\n",
      "\n"
     ]
    }
   ],
   "source": [
    "############################################################################################################\n",
    "printmd(\"**Step5: Adding Summaries**\")\n",
    "def AddBookkeepingOperators(model):\n",
    "    model.Print('accuracy', [], to_file=1)\n",
    "    model.Print('loss', [], to_file=1)\n",
    "    for param in model.params:\n",
    "        model.Summarize(param, [], to_file=1)\n",
    "        model.Summarize(model.param_to_grad[param], [], to_file=1)\n",
    "AddBookkeepingOperators(train_model)\n",
    "print(\"Current Model Helper proto:\\n\\n{}\".format(train_model.Proto()))\n",
    "############################################################################################################"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**Step6: Initializing network parameters**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Current Model Helper proto:\n",
      "\n",
      "name: \"mnist_train_init_4\"\n",
      "op {\n",
      "  output: \"dbreader_/home/abhi/caffe2_notebooks/tutorial_data/mnist/mnist-train-nchw-lmdb\"\n",
      "  name: \"\"\n",
      "  type: \"CreateDB\"\n",
      "  arg {\n",
      "    name: \"db_type\"\n",
      "    s: \"lmdb\"\n",
      "  }\n",
      "  arg {\n",
      "    name: \"db\"\n",
      "    s: \"/home/abhi/caffe2_notebooks/tutorial_data/mnist/mnist-train-nchw-lmdb\"\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"conv1_w\"\n",
      "  name: \"\"\n",
      "  type: \"XavierFill\"\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 20\n",
      "    ints: 1\n",
      "    ints: 5\n",
      "    ints: 5\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"conv1_b\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 20\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"conv2_w\"\n",
      "  name: \"\"\n",
      "  type: \"XavierFill\"\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 50\n",
      "    ints: 20\n",
      "    ints: 5\n",
      "    ints: 5\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"conv2_b\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 50\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"fc3_w\"\n",
      "  name: \"\"\n",
      "  type: \"XavierFill\"\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 500\n",
      "    ints: 800\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"fc3_b\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 500\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"pred_w\"\n",
      "  name: \"\"\n",
      "  type: \"XavierFill\"\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 10\n",
      "    ints: 500\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"pred_b\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 10\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"optimizer_iteration\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"dtype\"\n",
      "    i: 10\n",
      "  }\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"value\"\n",
      "    i: 0\n",
      "  }\n",
      "  device_option {\n",
      "    device_type: 0\n",
      "    cuda_gpu_id: 0\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"iteration_mutex\"\n",
      "  name: \"\"\n",
      "  type: \"CreateMutex\"\n",
      "  device_option {\n",
      "    device_type: 0\n",
      "    cuda_gpu_id: 0\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"ONE_0_0\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"value\"\n",
      "    f: 1.0\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"pred_b\"\n",
      "  output: \"pred_b_momentum\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"value\"\n",
      "    f: 0.0\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"ONE_0_0\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"value\"\n",
      "    f: 1.0\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"conv1_b\"\n",
      "  output: \"conv1_b_momentum\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"value\"\n",
      "    f: 0.0\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"ONE_0_0\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"value\"\n",
      "    f: 1.0\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"conv2_b\"\n",
      "  output: \"conv2_b_momentum\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"value\"\n",
      "    f: 0.0\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"ONE_0_0\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"value\"\n",
      "    f: 1.0\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"fc3_w\"\n",
      "  output: \"fc3_w_momentum\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"value\"\n",
      "    f: 0.0\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"ONE_0_0\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"value\"\n",
      "    f: 1.0\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"pred_w\"\n",
      "  output: \"pred_w_momentum\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"value\"\n",
      "    f: 0.0\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"ONE_0_0\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"value\"\n",
      "    f: 1.0\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"conv2_w\"\n",
      "  output: \"conv2_w_momentum\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"value\"\n",
      "    f: 0.0\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"ONE_0_0\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"value\"\n",
      "    f: 1.0\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"fc3_b\"\n",
      "  output: \"fc3_b_momentum\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"value\"\n",
      "    f: 0.0\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  output: \"ONE_0_0\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"shape\"\n",
      "    ints: 1\n",
      "  }\n",
      "  arg {\n",
      "    name: \"value\"\n",
      "    f: 1.0\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "op {\n",
      "  input: \"conv1_w\"\n",
      "  output: \"conv1_w_momentum\"\n",
      "  name: \"\"\n",
      "  type: \"ConstantFill\"\n",
      "  arg {\n",
      "    name: \"value\"\n",
      "    f: 0.0\n",
      "  }\n",
      "  device_option {\n",
      "  }\n",
      "}\n",
      "\n"
     ]
    }
   ],
   "source": [
    "############################################################################################################\n",
    "printmd(\"**Step6: Initializing network parameters**\")\n",
    "workspace.ResetWorkspace()\n",
    "workspace.RunNetOnce(train_model.param_init_net)\n",
    "print(\"Current Model Helper proto:\\n\\n{}\".format(train_model.param_init_net.Proto()))\n",
    "############################################################################################################"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**Step7: Train a Network**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/markdown": [
       "**Training status: Running**  Wait till the process is completed"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    Completed iterations: 0 , Total iterations to be completed: 500\n",
      "    Completed iterations: 100 , Total iterations to be completed: 500\n",
      "    Completed iterations: 200 , Total iterations to be completed: 500\n",
      "    Completed iterations: 300 , Total iterations to be completed: 500\n",
      "    Completed iterations: 400 , Total iterations to be completed: 500\n"
     ]
    },
    {
     "data": {
      "text/markdown": [
       "**Training status: Completed**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "############################################################################################################\n",
    "printmd(\"**Step7: Train a Network**\")\n",
    "workspace.CreateNet(train_model.net, overwrite=True)\n",
    "total_iters_sgd = 500\n",
    "accuracy_sgd = np.zeros(total_iters_sgd)\n",
    "loss_sgd = np.zeros(total_iters_sgd)\n",
    "printmd('**Training status: Running**  Wait till the process is completed')\n",
    "for i in range(total_iters_sgd):\n",
    "    if(i%100 == 0):\n",
    "        print \"    Completed iterations:\", i, \", Total iterations to be completed:\", total_iters_sgd\n",
    "    workspace.RunNet(train_model.net)\n",
    "    accuracy_sgd[i] = workspace.blobs['accuracy']\n",
    "    loss_sgd[i] = workspace.blobs['loss']\n",
    "#print \"Training completed\"\n",
    "printmd('**Training status: Completed**')\n",
    "############################################################################################################"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 7. Data Downloader example\n",
    "\n",
    "Mnist Data is downloaded using the following code. \n",
    "\n",
    "The Data contains 60,000 images of 500 different people’s handwriting which is used for training. Another set of 10,000 test images (different from the training images) is used to test the accuracy of the resulting CNN.\n",
    "\n",
    "Dataset Link: http://yann.lecun.com/exdb/mnist/ (For more details please visit this site)\n",
    "\n",
    "In your **Home** directory, a folder named **caffe2_notebooks** is created.\n",
    "\n",
    "Two subfolders are created in the folder above,\n",
    "    \n",
    "    1. Data Folder -> tutorial_data*\n",
    "    \n",
    "    2. Root Folder -> tutorial_mnist\n",
    "    \n",
    "The code below, first checks the presence of this folder and creates the directories if you are running this code for the first time.\n",
    "\n",
    "Then the code checks the precense of data inside these folders and downloads them if you are running the code for the first time.\n",
    "\n",
    "Once the code is executed you will find the absolute paths to the following folders\n",
    "\n",
    "    1. data folder\n",
    "    \n",
    "    2. workspace root folder\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/markdown": [
       "**lmdb train db found!**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/markdown": [
       "**lmdb test db found!**"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/markdown": [
       "Looks like you ran this before, so we need to cleanup those old files..."
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/markdown": [
       "**data folder:**/home/abhi/caffe2_notebooks/tutorial_data/mnist"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/markdown": [
       "**workspace root folder:**/home/abhi/caffe2_notebooks/tutorial_files/tutorial_mnist"
      ],
      "text/plain": [
       "<IPython.core.display.Markdown object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Download Data\n",
    "\n",
    "# Adopted from: https://caffe2.ai/docs/tutorial-MNIST.html\n",
    "\n",
    "def DownloadResource(url, path):\n",
    "    '''Downloads resources from s3 by url and unzips them to the provided path'''\n",
    "    import requests, zipfile, StringIO\n",
    "    print(\"Downloading... {} to {}\".format(url, path))\n",
    "    r = requests.get(url, stream=True)\n",
    "    z = zipfile.ZipFile(StringIO.StringIO(r.content))\n",
    "    z.extractall(path)\n",
    "    print(\"Completed download and extraction.\")\n",
    "    \n",
    "current_folder = os.path.join(os.path.expanduser('~'), 'caffe2_notebooks')\n",
    "data_folder = os.path.join(current_folder, 'tutorial_data', 'mnist')\n",
    "root_folder = os.path.join(current_folder, 'tutorial_files', 'tutorial_mnist')\n",
    "db_missing = False\n",
    "\n",
    "if not os.path.exists(data_folder):\n",
    "    os.makedirs(data_folder)   \n",
    "    print(\"Your data folder was not found!! This was generated: {}\".format(data_folder))\n",
    "\n",
    "# Look for existing database: lmdb\n",
    "if os.path.exists(os.path.join(data_folder,\"mnist-train-nchw-lmdb\")):\n",
    "    printmd(\"**lmdb train db found!**\")\n",
    "else:\n",
    "    db_missing = True\n",
    "\n",
    "if os.path.exists(os.path.join(data_folder,\"mnist-test-nchw-lmdb\")):\n",
    "    printmd(\"**lmdb test db found!**\")\n",
    "else:\n",
    "    db_missing = True\n",
    "\n",
    "# attempt the download of the db if either was missing\n",
    "if db_missing:\n",
    "    print(\"one or both of the MNIST lmbd dbs not found!!\")\n",
    "    db_url = \"http://download.caffe2.ai/databases/mnist-lmdb.zip\"\n",
    "    try:\n",
    "        DownloadResource(db_url, data_folder)\n",
    "    except Exception as ex:\n",
    "        print(\"Failed to download dataset. Please download it manually from {}\".format(db_url))\n",
    "        print(\"Unzip it and place the two database folders here: {}\".format(data_folder))\n",
    "        raise ex\n",
    "\n",
    "if os.path.exists(root_folder):\n",
    "    printmd(\"Looks like you ran this before, so we need to cleanup those old files...\")\n",
    "    shutil.rmtree(root_folder)\n",
    "\n",
    "os.makedirs(root_folder)\n",
    "workspace.ResetWorkspace(root_folder)\n",
    "\n",
    "printmd(\"**data folder:**\" + data_folder)\n",
    "printmd(\"**workspace root folder:**\" + root_folder)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
